使用libcurl通过HTTP从内存(而不是磁盘)发送文件

4 c++ upload image libcurl

我想通过用C++编写的程序发送图片. - 确定它有效,但我想将预先加载的载体中的图片发送到变量char(你知道我的意思吗?首先,我将图片加载到变量然后发送变量),因为现在我有了指定磁盘上图片的路径.

我想用c ++编写这个程序,使用curl库而不是exe.延期.我也找到了这样一个程序(我已经修改了一下)

Ola*_*ahl 10

CURLFORM_PTRCONTENTS在这里不正确,它不会创建文件上传部分.

相反,应该使用CURLFORM_BUFFER从内存中已存在的缓冲区发送图像.

 curl_formadd(&formpost,
          &lastptr,
          CURLFORM_COPYNAME, "send",
          CURLFORM_BUFFER, "nowy.jpg",
          CURLFORM_BUFFERPTR, data,
          CURLFORM_BUFFERLENGTH, size,
          CURLFORM_END);
Run Code Online (Sandbox Code Playgroud)


Tyl*_*nry 2

阅读以下文档curl_formaddhttp://curl.haxx.se/libcurl/c/curl_formadd.html

具体来说,在“选项”下:

CURLFORM_PTRCONTENTS

接下来是指向这部分内容的指针,即要发送的实际数据。libcurl 将使用指针并引用应用程序中的数据,因此您必须确保它一直保留到curl 不再需要它为止。如果数据不是以 NUL 结尾,或者您希望它包含零字节,则必须使用 CURLFORM_CONTENTSLENGTH 设置其长度。

CURLFORM_CONTENTSLENGTH

接下来是一个 long 给出内容的长度。请注意,对于 CURLFORM_STREAM 内容,此选项是必需的。

所以而不是

 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_FILE, "nowy.jpg",
              CURLFORM_END);
Run Code Online (Sandbox Code Playgroud)

你想要类似的东西

 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_PTRCONTENTS, p_jpg_data,
              CURLFORM_CONTENTSLENGTH, jpg_data_len,
              CURLFORM_END);
Run Code Online (Sandbox Code Playgroud)

我假设您知道如何创建p_jpg_data数据并将其读入其中,或者您是否需要对此进行解释?