beast. Возвращение jpeg в теле ответа на get запрос
HTTP клиент на boost::beast, get запрос, получаю ответ, в теле ответа jpeg картинка. Как ее сохранить в файл?
beast::multi_buffer::const_buffers_type data = body.data();
В случае, если возвращается JSON, просто преобразовываю data в строку:
string json = beast::buffers_to_string(data);
КОГДА ПРИШЛА КАРТИНКА Я пытаюсь сделать так:
ofstream outFile("foto_screen.jpg", ios::binary | ios::out);
for (auto it = data.begin(); it != data.end(); it++)
{
string ss = beast::buffers_to_string(*it);
outFile.write(ss.c_str(), sizeof ss.c_str());
}
outFile.close();
файл сохраняется, но картинка не открывается.
Ответы (1 шт):
Оказалось, что data имеет тип beast::multi_buffer::const_buffers_type. Это контейнер для других буферов (их может быть несколько). Итератор возвращает указатель на очередной буфер типа boost::asio::const_buffer. Тип boost::asio::const_buffer - имеет функцию data() возвращающую значение типа const void* и функцию - size() - размер data в байтах. Для записи массива байт потребовалось привести const void* к типу const char* и передать в функцию write.
ofstream outFile("foto_screen.jpg", ios::binary | ios::out);
for (auto it = data.begin(); it != data.end(); it++)
{
boost::asio::const_buffer d = *it;
const void* a = d.data();
const char* f = (char*) a;
outFile.write(f, d.size());
}
outFile.close();