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

集成Socket.io后Multer上传大于50KB文件无响应、文件被裁剪问题

问题原因

集成Socket.io后出现Multer异常的核心原因是请求原始流被提前消费:Multer依赖未被读取的原始req流处理文件上传,小于50KB的文件会被存入默认内存缓冲区可被完整读取,大于50KB的文件流被其他中间件截断消费,导致Multer无法接收到完整流,出现文件截断、回调不触发、请求挂起的问题。

解决方案
  • 调整中间件加载顺序
    禁止全局挂载express.json()、express.urlencoded()、body-parser等解析请求体的中间件,将这类中间件仅挂载到不需要文件上传的路由上,确保文件上传路由的req流在到达Multer前未被消费。
  • 排查Socket.io关联配置
    确认Socket.io挂载到HTTP服务时未开启额外的请求体解析配置,不要在Socket.io的中间件中读取req的流数据。如果使用了CORS中间件,确保预检请求(OPTIONS)被正确响应,不会阻塞上传请求的流传输。
  • 修复代码潜在隐患
    当前文件名后缀获取逻辑存在风险,当文件名包含多个.时会得到错误后缀,建议修改为:
    const ext = path.extname(file.originalname).slice(1)
    
  • 检查其他前置中间件
    排查所有在上传路由前执行的中间件(如请求日志、权限校验中间件),确认没有逻辑监听req的data/end事件提前消费请求流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:00