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

C++ 使用libcurl通过HTTP从内存(而不是磁盘)发送文件,c++,image,upload,libcurl,C++,Image,Upload,Libcurl,我想通过C++编写的程序发送图片好啊 它可以工作,但我想将图片从预加载的载体发送到变量char(你知道我的意思吗?首先,我将图片加载到变量中,然后发送变量),因为现在我必须指定磁盘上图片的路径 我想用CURL库来编写这个C++程序,而不是通过EXE。分机。 我还发现了这样一个程序(我对它做了一些修改)阅读curl\u formadd的文档: 具体而言,在“选项”下: 卷曲形式内容 后跟指向内容的指针 在这部分中,实际要发送的数据 走开。libcurl将使用指针和 请参考应用程序中的数据, 所以你

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

我想用CURL库来编写这个C++程序,而不是通过EXE。分机。
我还发现了这样一个程序(我对它做了一些修改)

阅读
curl\u formadd
的文档:

具体而言,在“选项”下:

卷曲形式内容

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

卷曲形内容长度

然后是一个长的给定长度 内容的完整性。请注意,对于 CURLFORM_流内容,此选项 这是强制性的

所以不是

 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\u jpg\u数据并将数据读入其中,或者您需要对此进行解释吗?

CURLFORM\u PTRCONTENTS在这里的用法不正确,它不会创建文件上载部分

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

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