You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何增大Express应用的请求文件大小限制?

解决Express大文件上传PayloadTooLargeError及无法获取file字段的问题

咱们先把问题根源理清楚:

  • 你碰到的PayloadTooLargeError,本质是Express默认对请求体大小有限制,但**bodyParser.json()bodyParser.urlencoded()只负责处理JSON、URL编码类型的请求体,完全管不了文件上传用的multipart/form-data格式**。所以你之前加的那两行配置不仅没解决大文件问题,反而干扰了文件上传的解析逻辑,导致后端拿不到file字段。
  • 额外出现的localhost:9000认证要求,大概率是错误的解析配置打乱了请求处理流程,让中间件或代理逻辑出现了异常。

正确的解决步骤:

1. 用multer处理文件上传(Express官方推荐的multipart解析工具)

multer是专门用来处理multipart/form-data类型请求的工具,既能设置文件大小限制,还能帮你正确解析出文件字段。

先安装multer:

npm install multer --save

2. 在你的Express应用中配置multer

根据你的代码结构,重点要在处理文件上传的后端服务(也就是端口9001的app_backend)里配置:

var multer = require('multer');
// 设置文件大小限制为50MB,单位支持bytes、KB、MB,这里50*1024*1024就是50MB
var upload = multer({ 
  limits: { fileSize: 50 * 1024 * 1024 } 
});

// 在需要处理文件上传的路由前挂载这个中间件
// 比如你的status路由负责处理上传,就改成下面这样:
app_backend.use('/', upload.any(), status);
// 如果是特定路由(比如/upload)处理上传,就写:
// app_backend.post('/upload', upload.single('file'), yourUploadHandler);

3. 移除之前错误的bodyParser配置

把你之前加的这两行代码删掉:

app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

这两个中间件不处理multipart请求,留着只会让请求体解析异常,导致后端拿不到file字段。

4. 验证效果

重启Express服务后,再上传超过1MB的文件,应该就不会再触发PayloadTooLargeError,同时后端也能正常获取到file字段了。

额外提醒:

如果你的文件上传请求是通过主app(端口9000)的代理转发到后端,还要确保被代理的目标服务也配置了对应的文件大小限制,否则代理环节也可能报错。

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

火山引擎 最新活动