gpt4 book ai didi

c++ - 使用cpprest通过json对象在http post中发送图像

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:04 30 4
gpt4 key购买 nike

我正在使用库 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

关于如何在JS中解码Base64的SO也有问题:How to send image as base64 string in JSON using HTTP POST?

附言谈到示例代码,您可以先将数据加载到 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());

最后,将代码添加到JSON:

MY_JSON += Code;   // instead of ostrm.str

关于c++ - 使用cpprest通过json对象在http post中发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678661/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com