2011-03-20 133 views
0

我正在使用libcurnet将一些字段和html或pdf文件发布到服务器。我发布字段但不能上传文件到服务器。这里是我的代码:无法通过libcurl.net上传HTTP文件

公共静态无效的主要(字串[] 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); } } 

我不知道问题出在哪里。

回答

0

尝试使用fiddler2窥探TCP流,尤其是头部分,并将其与您的浏览器执行手动上载进行比较。

0

我想你已经从here下载了库本身。如果是这样,请尝试使用上传示例/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服务器上的文件更多的则2MB。

在文件“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]"; 
    } 
?>