使用libcurl通过HTTP POST发送多个文件

6

我正在编写一个使用libcurl进行简单HTTP POST请求上传文件的C应用程序。我可以用一个文件来做到这一点,但是我不知道如何上传多个文件。我尝试使用相同代码的另一种方法,但没有成功。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);
}

你多次调用这个函数吗? - iabdalkader
1个回答

5

docs/examples/postit2.c示例代码所示,以及文档[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选项,后者会导致文件被读取并将其内容用作此部分中的数据。请确保通过查看文档[1]来使用适当的选项。
专业提示:您可以使用调试服务(如httpbinechohttp)轻松测试代码。
[1]

对于CURLFORM_FILE,用户可以通过提供多个CURLFORM_FILE参数(每个参数后跟文件名)来在一个部分中发送一个或多个文件。


1
嗨,谢谢你的回答。但是每当我尝试上传一个大文件时,它就会给我一个错误:从对等方接收数据失败。有什么解决办法吗? - user1758596
如果您使用docs/examples/postit2.c示例代码并使用最新版本的libcurl,您是否仍然遇到问题?另外:如果按照上述建议将文件上传到httpbin或echohttp会发生什么? - deltheil
是的,我正在使用最新版本的libcurl,文档/示例/postit2.c中的代码只是同时发送两个文件,我想一个接一个地发送一个文件和另一个文件。 - user1758596

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接