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

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,步骤如下:

  1. 安装multer
npm install multer
  1. 配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:34:58