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

Express+Multer上传7G大文件失败,3.5G可上传该如何解决?

问题根因定位

你遇到的2.8G上传截断是典型的环境/配置限制问题,按优先级排查即可:

  • 32位Node.js运行环境单进程可处理的文件大小上限刚好在2.8G~3G区间,和你遇到的截断阈值完全匹配,这是最高概率的原因
  • Node.js内置HTTP服务器默认配置限制、multer未显式配置大文件上传参数
  • 操作系统层面的文件大小限制、临时目录存储限制
  • 部署链路中存在反向代理(如Nginx、网关)的上传大小、超时限制

修复步骤

1. 确认Node.js运行架构

执行命令查看当前Node的架构:
node -p "process.arch"
如果输出为ia32则为32位版本,直接卸载后重装64位Node.js即可解决截断问题。

2. 调整服务端代码配置

需要显式配置multer的文件大小限制、HTTP服务的超时参数,修改后代码如下:

const express = require('express')
const multer = require('multer')
const http = require('http')

const app = express()
const server = http.createServer(app)

const PORT = 5568
// 显式设置单文件大小上限为10G,可根据需求调整
const uploader = multer({ 
  dest: '/tmp',
  limits: {
    fileSize: 10 * 1024 * 1024 * 1024 // 10GB
  }
}).single('file')

app.post('/upload', (req, res) => {
  uploader(req, res, (err) => {
    if (err) {
      console.log('errrrrr');
      console.log(err);
      return res.status(400).json(err)
    }

    console.log('upload finish!!!')
    return res.status(200).json(req.file)
  })
})

// 禁用HTTP服务超时限制,适配大文件长耗时上传
server.requestTimeout = 0
server.keepAliveTimeout = 0
server.headersTimeout = 0

server.listen(PORT, () => {
  console.log(`server is running at ${PORT} ...`)
})

3. 检查操作系统层面限制

  • 执行df -h /tmp确认临时目录可用空间大于7G,若空间不足可更换multer的存储路径到其他分区
  • 执行ulimit -f查看单文件大小限制,若为非unlimited,可执行ulimit -f unlimited临时调整,或修改系统配置永久生效

4. 检查部署链路代理配置

如果你的服务前部署了Nginx、云网关等反向代理,需要调整对应配置:

  • Nginx需配置client_max_body_size 10G;、proxy_read_timeout 3600s;、proxy_send_timeout 3600s;
  • 云网关需调整上传文件大小限制、超时时间到匹配需求的阈值

验证步骤

修改完成后可先用curl命令上传测试,排除Postman客户端本身的问题:
curl -X POST -F "file=@/path/to/your/file.tar" http://<你的服务器IP>:5568/upload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:21:01