You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boost Beast通过HTTP POST发送文件,服务器端接收不到内容

问题排查与解决

你的代码遗漏了HTTP请求负载的关键准备步骤,导致服务器无法正确识别请求体,以下是具体问题和修复方案:

核心问题:未准备请求负载

用Boost Beast的file_body构造POST请求时,必须调用req.prepare_payload()来自动设置Content-Length(或分块编码头部)。服务器需要通过这个头部判断请求体的长度,你直接调用write时没有设置该字段,服务器会默认请求无体,自然接收不到文件内容。

修复后的代码

beast::http::request<beast::http::file_body> req;
                
req.method(beast::http::verb::post);
req.target(target);
req.set(beast::http::field::host, host);
req.set(beast::http::field::user_agent, BOOST_BEAST_VERSION_STRING);

// 打开文件后先检查错误
req.body().open(inputFilePath.c_str(), beast::file_mode::scan, ec);
if(ec) {
    // 这里处理文件打开失败的逻辑
    return;
}

// 关键步骤:自动设置Content-Length头部
req.prepare_payload();

write(_stream, req);

额外检查项

  • 确认inputFilePath指向的文件存在且有可读权限,务必在打开文件后检查ec的状态,避免基于无效文件句柄发送请求。
  • 如果服务器要求multipart/form-data格式的文件上传(比如表单提交场景),file_body并不适用,需要改用string_body或buffer_body手动构造multipart格式的请求体。

内容的提问来源于stack exchange,提问作者Some Dinosaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:52:36