Express.js 大文件上传报413 Payload Too Large错误求助
解决Express 4.18.2上传图片返回413 Payload Too Large错误
你的问题核心是配置的中间件不匹配请求类型:你上传图片用的是FormData(对应multipart/form-data格式),但之前配置的express.json、express.urlencoded及bodyParser相关中间件,仅负责处理JSON和URL编码的请求体,完全不支持multipart类型的请求,所以这些配置对文件上传没有任何作用。
正确解决方案是使用专门处理multipart请求的中间件multer,步骤如下:
- 安装multer
npm install multer
- 配置multer并绑定到上传路由
const express = require('express'); const multer = require('multer'); const app = express(); // 配置文件大小限制:单个文件最大50MB,整个请求体最大50MB const upload = multer({ limits: { fileSize: 50 * 1024 * 1024, // 转换为字节单位 fieldSize: 50 * 1024 * 1024 } // 可选配置:若需将文件保存到磁盘,添加以下storage配置(默认文件暂存于内存) // storage: multer.diskStorage({ // destination: (req, file, cb) => { // cb(null, './uploads'); // 需提前创建该文件夹 // }, // filename: (req, file, cb) => { // cb(null, Date.now() + '-' + file.originalname); // 自定义文件名避免重复 // } // }) }); // 绑定multer中间件到上传路由,注意参数需和表单的文件字段名一致 // 例如你的表单是<input type="file" name="image">,则改为upload.single('image') app.put('/api/upload-image', upload.single('file'), (req, res) => { // req.file 包含上传文件的所有元信息 // 在此编写你的业务逻辑,如文件存储、生成访问链接等 res.status(200).json({ message: '图片上传成功', fileInfo: req.file }); });
额外注意点
- 若服务器通过Nginx反向代理,需修改Nginx配置文件(
nginx.conf或对应站点配置),添加/调整:
client_max_body_size 50M;
否则Nginx会先拦截超出大小的请求,直接返回413,此时Express的配置不会生效。
- 多文件上传场景可替换
upload.single('file')为:upload.array('files', 5):接受名为files的最多5个文件upload.fields([{name: 'avatar', maxCount:1}, {name: 'gallery', maxCount:5}]):接受多个不同字段的文件
内容的提问来源于stack exchange,提问作者ersinware
相关产品推荐
相关产品推荐

