2014-10-10 22 views
1

我試圖做一個HTTP POST請求,我有兩個文本輸入和3個文件上傳CURL - 未知形式的選擇

我似乎無法得到要上傳的文件,當我嘗試添加使用

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image, CURLFORM_END); 

函數的返回值是CURL_FORMADD_UNKNOWN_OPTION,我找不出什麼我做錯了的形式,這裏是我的代碼

CURL *curl; 
CURLcode res; 

struct curl_httppost *formpost = NULL; 
struct curl_httppost *lastptr = NULL; 
static const char buf[] = "Expect:"; 

curl_global_init(CURL_GLOBAL_ALL); 


curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "letter", CURLFORM_COPYCONTENTS, "Letter A",CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "points", CURLFORM_COPYCONTENTS, "a b c", CURLFORM_END); 

// these call return the unknown option 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image, CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "lines", CURLFORM_FILE, lines_image, CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "downsample", CURLFORM_FILE, downsample_image, CURLFORM_END); 


curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "send", CURLFORM_END); 

curl = curl_easy_init(); 

if (curl) { 
    curl_easy_setopt(curl, CURLOPT_URL, url); 
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); 
    res = curl_easy_perform(curl); 
    if (res != CURLE_OK) { 
     // does not go here... 
    } 
    curl_easy_cleanup(curl); 
    curl_formfree(formpost); 
+0

什麼是'brush_image'聲明,並在那裏把它初始化?或者,也許你正在使用不支持'CURLFORM_FILE'的curl的舊版本? – 2014-10-10 18:59:48

+0

另外,如果'curl_easy_init()'失敗,你正在泄漏'formpost'。 – 2014-10-10 19:01:43

+0

brush_image的類型是std :: string,它在之前被初始化,它有一個值,我用調試器進行了驗證。 – aviran 2014-10-10 19:03:15

回答

2

你傳入std::string雜物請致電curl_formadd()。它沒有概念std::string,只有char*。您可以使用std::string::c_str()方法傳遞char*值:

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "brush", CURLFORM_FILE, brush_image.c_str(), CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "lines", CURLFORM_FILE, lines_image.c_str(), CURLFORM_END); 
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "downsample", CURLFORM_FILE, downsample_image.c_str(), CURLFORM_END);