Я новичок в Boost и пытаюсь добавить запрос POST к одному из примеров клиента. Но мне не удалось прочитать запрос http::quest<http::file_body>
на стороне сервера.
Assertion failed: body_.file_.is_open(), file D:\Boost C++ Projects\AsioServre\include\boost _1_72_0\boost\beast\http\impl\file_body_win32.hpp, line 184
Я прочитал код Boost в этом файле file_body_win32.hpp , он просто говорит мне, что файл открытый. Как так? И странно то, что если я поменяю content_type: "text/plain"
на content_type: "image/jpeg"
(тело открывает изображение), тогда утверждение будет пройдено, но с ошибкой превышения лимита тела.
Клиентская сторона:
std::string path = "C:\\Users\\Jinx\\Desktop\\Damn\\test.txt";
body.open(path.c_str(), boost::beast::file_mode::scan, ec);
req_to.version(version);
req_to.method(http::verb::post);
req_to.target(target);
req_to.set(http::field::host, host);
req_to.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
req_to.set(http::field::content_type, "text/plain");
req_to.content_length(body.size());
req_to.keep_alive(req_.keep_alive());
req_to.body() = std::move(body);
req_to.prepare_payload();
http::async_write(stream_, req_to, beast::bind_front_handler(&session::on_write, shared_from_this()));
На стороне сервера я понятия не имею, какой тип буфера мне следует использовать. Я пробовал мультибуфер, он тоже не работал.
Сторона сервера:
beast::tcp_stream stream_;
beast::flat_buffer buffer_;
std::shared_ptr<std::string const> doc_root_;
http::request<http::file_body> req_from;
http::async_read(stream_, buffer_, req_from, beast::bind_front_handler(&session::on_read, shared_from_this()));
Согласно документу http :: file_body :
При сериализации , реализация прочитает файл и представит эти октеты как содержимое тела.
Как файл может быть открыт сервером?