post запрос на сервер вместе с картинкой в бинарном формате. Аналогия в питоне open(filename, 'rb')).
Пытаюсь использовать либу cpr и сделать так:
std::FILE *fp = std::fopen("aaa.jpg", "rb");
json::json j;
j["my_file"] = fp;
auto response = cpr::Post(
cpr::Url{url_for_frs_token},
cpr::Body{j.dump()
}
);
Кидает ошибку в этом моменте: j["my_file"] = fp;
Можете подсказать как решить эту проблему?
https://t.me/supapro/991704
вот я так и пытаюсь сделать. Вот этот момент выдает ошибку j["my_file"] = fp;
Это неправильно. Почему ты решил так сделать?
Особых причин нету, я просто пытаюсь решить это. А как правильно ?
а в каком формате принимает запрос сервер?
Правильно - прочитать документацию к библиотеке
C++ - не питон, здесь нельзя наугад писать код, не читая документацию, в надежде, что оно как-нибудь заработает
если на питоне , принимает в :'_io.BufferedReader' в С++ точно не знаю, пока с такой же логикой открывал файл: std::FILE *fp = std::fopen("aaa.jpg", "rb");
Код для отправки на питоне как выглядит?
data = {file': open('aa.jpg', 'rb')} response = requests.post(url, files=data)
Это сишное открытие
Зачем в с++ так открывать?
В таком случае нужно сначала прочитать файл в какой-то буфер, а потом записать из буфера в json
мне непринципиально как открывать, мне просто нужно отправить. Если есть путь как это можно сделать, был бы рад услышать)
хмм, а в какой буфер , есть варианты ?
В тот, который сможет принять библиотека для json (а это можно узнать из документации..)
а вы уверены что он в бинарном виде отправляется?
Окей, попробую. Спасибо!
Тебе надо прочитать файл, запихнуть это в json и о править?
грубо говоря, да
std::istreambuf_iterator std::vector<char> и строка
json::json j; std::ifstream input( "file.jpg", std::ios::binary ); std::copy( std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>( ), std::back_inserter(json.emplace("my_file", "").first));
Я бы в вектор с начала загнал сразу
хмм, сейчас попроьую
вряд ли сработает
Если не хорош в С++, то и не фиг таким заниматься.
вообще, в питоне в files он. Тут точно не знаю
а документацию почитать кто-то запрещает?
Как бы это долго объяснять очень... Ты как это представляешь-то? Зашёл так в чат, и быстренько выучил С++, и все библиотеки на нём...
Не понимаю причем тут это. У меня есть вопрос, вот я и его задаю.
google.com/search?q=cpr+upload+file
ну а что ты вообще тут хотел сделать? В JSON бывают 5 типов данных: число, булева величина, строка, массив и объект. FILE* ни к одному из этих типов не относится.
скорее всего в либе есть возможность читать напрямую из стрима...
std::getline(stream, mystring, '\0')
istreambuf не кеширует
Обсуждают сегодня