Hi,
我在我的虛擬機上編譯好了libcurl庫,然後參照列程寫了個簡單的http post上傳文件。
在構建form表單的時候,如果把參數設置為CURLFORM_FILE 並輸入對應的文件名,可以再服務器(HFS)指定的文件路徑下看到我上傳的文件。
但我要使用libcurl的平台沒有文件系統,所以就打算用CURLFORM_BUFFER參數來設置數據區。結果這個能夠上傳,可是不能再文件路徑下看到這個文件。
HFS的上傳權限打開了的。
對比兩種方式的wireshark包,發現在Content-Disposition這個請求頭後面的filename沒指定。
於是用curl_slist_append卻手動設定這個值為我想要的任意名稱,問題又來了,正常的流程中,filename這個參數
是添加在MIME Multipart Media後面的。但手動添加的curl_list卻在Hypertext Transfer Procotol後面。這下查找了好久的資料也沒看到怎麼處理,網上各位大神弄的都是一個文件上傳到另一個文件的方式。
請問誰有經驗,麻煩解惑,謝謝!
上傳測試源代碼和兩個wireshark截圖 success.bmp(直接傳入file方式,可以創建文件的截圖)fail.bmp(用緩沖區地址作為數據輸入,不可以創建制定的文件) main.c 測試程序
沒看到哪兒上傳附件,我發個鏈接,謝謝!http://pan.baidu.com/s/1ntAc6ql
哦,是我的curl_formadd沒寫好,添加CURLFORM_BUFFER來指定文件名就可以了。 if(curl_formadd(&post, &last,
CURLFORM_COPYNAME, "sourcedata",
CURLFORM_BUFFER, "test.bmp" ,
CURLFORM_BUFFERPTR, imageData ,
CURLFORM_BUFFERLENGTH, 102400,
CURLFORM_END) != 0)
{
fprintf(stderr, "curl_formadd2 error.\n");
goto out;
}