6

我正在编写一个 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);
}
4

1 回答 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 参数,每个参数后跟文件名来发送一个或多个文件。

于 2012-10-24T08:44:19.833 回答