Mongoose 6.18嵌入式Web服务器文件上传连接中断问题求助
问题排查与解决方法
前端配置修正
- 移除手动设置的
Content-Type和Content-Length请求头:使用axios发送FormData时,浏览器会自动生成带正确boundary分隔符的multipart/form-data请求头,同时计算并填充准确的Content-Length值,手动设置空的Content-Length会导致服务端无法识别完整请求长度,接收部分数据后直接断开连接。 - 增加超时时间配置:大文件上传耗时较长,axios默认超时时间可能会主动断开未完成的请求,可根据文件大小合理调整超时阈值。
修正后的前端代码示例:
await axios.post(`http://${window.location.host}/upload`, data, { timeout: 300000 // 可根据实际情况调整,单位为毫秒 }).then((response) => { console.log(response); console.log(response.data.message); alert("File Upload successful"); }, (error) => { console.log(error); alert("File Upload not successful"); });
服务端配置排查
- 确认编译配置中已开启
MG_ENABLE_MULTIPART宏:未开启该宏的情况下,Mongoose不会解析multipart格式的请求,会直接断开连接。 - 检查
mg_file_upload_handler的参数配置:- 确认设置的上传存储目录存在且服务进程拥有写入权限,权限不足会触发写入失败直接断连
- 确认
max_size参数配置大于你需要上传的文件大小,超过大小限制时Mongoose会主动终止上传连接
- 排查Mongoose事件循环阻塞问题:嵌入式环境中如果有其他同步耗时业务逻辑占住事件循环,会导致TCP缓冲区满后无法继续接收数据,触发连接断开,需将耗时逻辑改为异步处理,避免阻塞事件循环。
- 检查设备内存占用:嵌入式设备内存有限,大文件上传过程中如果内存不足会触发异常断连,可适当调整Mongoose的接收缓冲区大小适配设备硬件条件。
内容的提问来源于stack exchange,提问作者JPillai
相关产品推荐
相关产品推荐

