我正在编写一个C应用程序,它使用libcurl使用简单的HTTP POST请求上传文件。我能用一个文件来做,但我不知道如何上传多个文件。我尝试使用相同代码的另一种方法但无济于事。 HTTP POST的代码如下:
void sendHashes()
{
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
CURL *curlhash;
CURLcode response;
curlhash = curl_easy_init();
curl_easy_setopt(curlhash, CURLOPT_URL, URL);
curl_formadd(&post, &last,
CURLFORM_COPYNAME, "Hash",
CURLFORM_FILECONTENT, "C:\\file.txt",
CURLFORM_END
);
curl_easy_setopt(curlhash, CURLOPT_HTTPPOST, post);
response = curl_easy_perform(curlhash);
curl_formfree(post);
curl_easy_cleanup(curlhash);
}
答案 0 :(得分:4)
如docs/examples/postit2.c
示例代码所示,the doc [1]所述,您只需为要上传的每个文件调用curl_formadd
:
curl_formadd(&post,
&last,
CURLFORM_COPYNAME, "Foo",
CURLFORM_FILE, "foo.txt",
CURLFORM_END);
curl_formadd(&post,
&last,
CURLFORM_COPYNAME, "Bar",
CURLFORM_FILE, "bar.txt",
CURLFORM_END);
/* ... */
请注意,我使用CURLFORM_FILE
选项而不是CURLFORM_FILECONTENT
导致该文件被读取,其内容被用作此部分中的数据。请务必通过查看doc [1]来使用正确的选项。
专业提示:您可以使用httpbin或echohttp等调试服务轻松测试代码。
[1]
对于CURLFORM_FILE,用户可以在一个部分中发送一个或多个文件 提供多个CURLFORM_FILE参数,每个参数后跟 文件名。