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

时间:2010-03-27 13:07:33

标签: c++ image upload libcurl

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

我想用c ++编写这个程序,而不是通过exe编写。延期。 我也找到了这样一个程序(我已经对它进行了一些修改)

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:1)

阅读curl_formaddhttp://curl.haxx.se/libcurl/c/curl_formadd.html

的文档

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

  

CURLFORM_PTRCONTENTS

     

后跟一个指向内容的指针   这部分,实际数据发送   远。 libcurl将使用指针和   参考应用程序中的数据,   所以你必须确保它一直存在   卷曲不再需要它。如果数据   不是NUL终止,或者如果您愿意   要包含零字节,必须设置   它的长度   CURLFORM_CONTENTSLENGTH。

     

CURLFORM_CONTENTSLENGTH

     

然后是长的给出长度   的内容。请注意   CURLFORM_STREAM内容,此选项   是强制性的。

所以而不是

 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_FILE, "nowy.jpg",
              CURLFORM_END);

你想要像

这样的东西
 curl_formadd(&formpost,
              &lastptr,
              CURLFORM_COPYNAME, "send",
              CURLFORM_PTRCONTENTS, p_jpg_data,
              CURLFORM_CONTENTSLENGTH, jpg_data_len,
              CURLFORM_END);

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