libcurl上传文件
libcurl參數(shù)很多,一不小心就容易遇到問題。曾經(jīng)就遇到過一個(gè)很蛋疼的問題:libcurl斷點(diǎn)下載>>
?
這里主要匯總一下,libcurl上傳的二種方式:
1、直接上傳文件,類似form表單<input type=”file” />,<form enctype=”multipart/form-data”…;
2、上傳二進(jìn)制流;
?
至于設(shè)定自定義頭,都是使用一樣的方法
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 */
前往官網(wǎng)查看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參數(shù)(Content-Type/Mime-Type)
二進(jìn)制流上傳: //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);
?
‘' is the name of this part, 'unnamed.png' is the name set in the file name field.
上面的參數(shù)均不可缺省,如果缺省結(jié)果可能不太符合預(yù)期。其中Content-Type默認(rèn)為“application/octet-stream”
CURLFORM_COPYNAME為上傳的字段名,如上圖所示(name之后)
CURLFORM_BUFFER? 在沒有使用CURLFORM_FILE上傳自定義文件時(shí)使用,它用來告訴libcurl文件內(nèi)容已經(jīng)在緩存中了,在內(nèi)容的頭信息中它提供了filename字段。我之前沒加這個(gè)參數(shù)發(fā)現(xiàn)一直上傳不成功- -
*** 還有一個(gè)地方要注意的是:CURLFORM_BUFFERLENGTH它的類型必須為long
?
為了方便測試,我使用了node.js的formidable來調(diào)試
?
?
參考鏈接:
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協(xié)議上傳文件
使用libcurl POST數(shù)據(jù)和上傳文件
總結(jié)
以上是生活随笔為你收集整理的libcurl上传文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到一群小蛇预示着什么
- 下一篇: 梦到一个有好感的人代表什么