使用 cpprest 通过 json 对象在 http post 中发送图像
Send image in http post via json object using cpprest
我正在使用库cpprest。我正在尝试将图像文件作为二进制文件发送到端点。我需要它遵循 json 结构
{
"image": "binaryfile",
"type": "file"
}
但是我不知道该怎么做,只有接收二进制数据的精美示例。所以这就是我到目前为止所拥有的:
ifstream imageToConvert;
imageToConvert.open("path to file", ios::binary);
ostringstream ostrm;
if (imageToConvert.is_open())
{
ostrm << imageToConvert.rdbuf();
imageToConvert.close();
}
imageToConvert.close();
//build json string to convert
string MY_JSON = ("{"image" : "");
MY_JSON += (ostrm.str());
MY_JSON += ("","type" : "file"}");
//set up json object
json::value obj;
obj.parse(utility::conversions::to_string_t(MY_JSON));
但是,这会引发内存错误异常。所以我的问题是,从文件中获取此二进制数据的最佳方法是什么,以及如何正确构建我的 json 对象以在我的帖子中发送?
转换为 ostringstream
以及稍后将字符串连接到 MY_JSON 会产生错误,因为您的二进制图像数据很可能包含一些不可引导的字符。
我认为您应该将二进制数据从 ifstream
编码为 base64 字符串,并将该编码字符串传递给MY_JSON。在服务器端使用 base64 解码解码image
字段中的数据。
C++的基本 Base64 编码/解码可在此处找到:http://www.adp-gmbh.ch/cpp/common/base64.html
SO上也有关于如何在JS中解码Base64的问题:如何使用HTTP POST在JSON中将图像作为base64字符串发送?
附言 谈到示例代码,您可以先将数据加载到 std::vector
.
std::ifstream InFile( FileName, std::ifstream::binary );
std::vector<char> data( ( std::istreambuf_iterator<char>( InFile ) ), std::istreambuf_iterator<char>() );
然后你打电话给
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len);
喜欢这个:
std::string Code = base64_encode((unsigned char*)&data[0], (unsigned int)data.size());
最后,将Code
添加到 JSON 中:
MY_JSON += Code; // instead of ostrm.str
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何使用curlpp通过POST方法上传文件和json数据
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- 使用 cpprest 通过 json 对象在 http post 中发送图像
- libcURL POST 分段上传(带有缓冲图像)返回 HTTP 400