Невозможно загрузить файл http с помощью libcurl.net - PullRequest
0 голосов
/ 21 марта 2011

Я использую libcurnet для публикации некоторых полей и HTML или PDF-файла на сервере. Я публикую поля, но не могу загрузить файл на сервер. Вот мой код:

public static void Main (String [] args) { пытаться { Curl.GlobalInit ((INT) CURLinitFlag.CURL_GLOBAL_ALL);

FileStream fs = new
FileStream(args[0], FileMode.Open, FileAccess.Read, FileShare.Read);

Easy easy = new Easy();

Easy.ReadFunction rf = new Easy.ReadFunction(OnReadData);
easy.SetOpt(CURLoption.CURLOPT_READFUNCTION,rf);

easy.SetOpt(CURLoption.CURLOPT_UPLOAD, true);
easy.SetOpt(CURLoption.CURLOPT_PUT, true);
easy.SetOpt(CURLoption.CURLOPT_URL, args[1]);

easy.SetOpt(CURLoption.CURLOPT_READDATA, fs);
easy.SetOpt(CURLoption.CURLOPT_INFILESIZE, fs.Length);

Easy.DebugFunction df = new Easy.DebugFunction(OnDebug);
easy.SetOpt(CURLoption.CURLOPT_DEBUGFUNCTION, df);
easy.SetOpt(CURLoption.CURLOPT_VERBOSE, true);

Easy.ProgressFunction pf = new Easy.ProgressFunction(OnProgress);
easy.SetOpt(CURLoption.CURLOPT_PROGRESSFUNCTION, pf);

Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData);
easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
easy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, args[2]);

easy.SetOpt(CURLoption.CURLOPT_USERAGENT, "Mozilla 4.0 (compatible; MSIE 6.0; Win32");
easy.SetOpt(CURLoption.CURLOPT_FOLLOWLOCATION, true);

easy.SetOpt(CURLoption.CURLOPT_POST, true);
easy.SetOpt(CURLoption.CURLOPT_VERBOSE, 1);
easy.SetOpt(CURLoption.CURLOPT_STDERR, 0);

easy.Perform();
easy.Cleanup();

fs.Close();
Curl.GlobalCleanup();    }    catch (Exception ex)    {
  Console.WriteLine(ex);    }  }

Я не знаю, в чем проблема.

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Полагаю, что сама библиотека, которую вы скачали с здесь . Если это так, попробуйте использовать образец загрузки из / samples / FileUpload.cs

Примерно так.

        MultiPartForm mf = new MultiPartForm();        

        // <input type="File" name="f1">
        mf.AddSection(CURLformoption.CURLFORM_COPYNAME, "uploadedfile",
            CURLformoption.CURLFORM_FILE, "C:\\My Files\myUploadFile.exe",
            CURLformoption.CURLFORM_CONTENTTYPE, "application/binary",
            CURLformoption.CURLFORM_END);

        Easy easy = new Easy();
        easy.SetOpt(CURLoption.CURLOPT_HTTPPOST, mf);
        easy.SetOpt(CURLoption.CURLOPT_URL, "localhost/uploader.php");

Не забудьте изменить «upload_max_filesize» в php.ini на сервере для файлов размером более 2 МБ.

В файле "uploader.php" вам нужно написать что-то вроде этого.

<?php
  $target_path = "/uploaded/". basename( $_FILES["uploadedfile"]["name"]);
  if(move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], $target_path)) 
  {     
    echo "[File Upload Successful]";
  } 
  else
  {
    echo "[File Upload Error]";
  }
?>
0 голосов
/ 21 марта 2011

Попробуйте использовать fiddler2, чтобы шпионить за потоком TCP, особенно за заголовком, и сравните его с выполнением ручной загрузки из вашего браузера.

...