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 шт):

Автор решения: sergey

Оказалось, что 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();
→ Ссылка