libcurl上傳檔案

來源:互聯網
上載者:User

標籤:

libcurl參數很多,一不小心就容易遇到問題。曾經就遇到過一個很蛋疼的問題:libcurl斷點下載>>

 

這裡主要匯總一下,libcurl上傳的二種方式:

1、直接上傳檔案,類似form表單<input type=”file” />,<form enctype=”multipart/form-data”…;

2、上傳二進位流;

 

至於設定自訂頭,都是使用一樣的方法

struct curl_slist *headers=NULL;
headers = curl_slist_append(headers, "Content-Type: text/xml");
headers = curl_slist_append(headers, "Accept: text/html, */*;q=0.01");
//...

//set headers
curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);


//last free the header list
curl_slist_free_all(headers); /* free the header list */

前往官網查看CURLOPT_HTTPHEADER>>

 

直接上傳檔案:

struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
 
curl_formadd(&formpost, &lastptr,
    CURLFORM_COPYNAME, "uploadfile",
    CURLFORM_FILE, "/",//imagepath
    CURLFORM_CONTENTTYPE, "Image/jpeg",
    CURLFORM_END);
 
curl_formadd(&formpost, &lastptr,
    CURLFORM_COPYNAME, "filename",
    CURLFORM_COPYCONTENTS, "test.jpg",
    CURLFORM_END);
 
curl_easy_setopt(m_curl,CURLOPT_HTTPPOST,formpost);
 
//last free post
curl_formfree(formpost);

如果上傳其它檔案類型,那就在curl_formadd中附加CURLFORM_CONTENTTYPE參數(Content-Type/Mime-Type)
二進位流上傳:
//referer http://curl.haxx.se/mail/lib-2003-08/0190.html
curl_formadd(&post, &last,
             CURLFORM_COPYNAME, "file",
             CURLFORM_BUFFER, "unnamed.png",
             CURLFORM_BUFFERPTR, memblock,    
             CURLFORM_BUFFERLENGTH, memblock_length,
             CURLFORM_CONTENTTYPE, "image/png",
             CURLFORM_END);

 
‘file‘ is the name of this part, ‘unnamed.png‘ is the name set in the file name field.

上面的參數均不可預設,如果預設結果可能不太符合預期。其中Content-Type預設為“application/octet-stream”

CURLFORM_COPYNAME為上傳的欄位名,如所示(name之後)

CURLFORM_BUFFER  在沒有使用CURLFORM_FILE上傳自訂檔案時使用,它用來告訴libcurl檔案內容已經在緩衝中了,在內容的頭資訊中它提供了filename欄位。我之前沒加這個參數發現一直上傳不成功- -

*** 還有一個地方要注意的是:CURLFORM_BUFFERLENGTH它的類型必須為long

 

為了方便測試,我使用了node.js的formidable來調試

 

 

參考連結:

http://curl.haxx.se/libcurl/c/curl_formadd.html

http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

http://curl.haxx.se/libcurl/c/postit2.html

http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type

http://zengrong.net/post/2088.htm

http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working

通過HTTP協議上傳檔案

使用libcurl POST資料和上傳檔案

libcurl上傳檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.