Node.js API部署AWS Elastic Beanstalk上传文件到S3出现Request Entity Too Large错误
问题根因
- 你当前配置的
express.json()和express.urlencoded()仅能处理application/json、application/x-www-form-urlencoded类型的请求,完全不覆盖multipart/form-data格式的文件上传请求,所以你设置的50MB限制对文件上传场景无效。 - AWS Elastic Beanstalk 默认搭载的Nginx反向代理有全局请求体大小限制,默认值通常为1~2MB,即使Node服务层面放开了限制,代理层也会先拦截超量请求抛出
Request entity too large错误。 - 你现有的S3上传逻辑没有问题,和当前报错无关,无需修改。
解决方案
1. 配置multipart请求解析中间件
选择multer作为文件上传解析中间件,按需配置请求大小阈值:
首先安装依赖:npm install multer
然后在app.js中添加如下配置:
const multer = require('multer'); // 按需调整阈值,示例为单文件最大10MB,总请求体最大50MB const upload = multer({ limits: { fileSize: 10 * 1024 * 1024, fieldSize: 50 * 1024 * 1024, parts: 100 }, // 临时文件存放到EB实例的/tmp目录即可 storage: multer.diskStorage({ destination: (req, file, cb) => cb(null, '/tmp'), filename: (req, file, cb) => cb(null, `${Date.now()}-${file.originalname}`) }) }) // 你的上传接口使用multer中间件,示例为接收字段名为images的最多10个文件 app.post('/你的上传接口路径', upload.array('images', 10), async (req, res) => { // req.files为解析后的文件列表,遍历调用你已有的uploadFile方法上传到S3即可 })
2. 修改Elastic Beanstalk代理层限制
根据你使用的EB运行环境版本选择对应配置方式:
- 如果你使用Amazon Linux 2/2023版本的EB环境:在项目根目录创建
.platform/nginx/conf.d/proxy.conf文件,写入以下内容:
client_max_body_size 50M;
- 如果你使用老版本Amazon Linux 1的EB环境:在项目根目录创建
.ebextensions/nginx.config文件,写入以下内容:
files: "/etc/nginx/conf.d/proxy.conf": mode: "000644" owner: root group: root content: | client_max_body_size 50M;
配置完成后重新部署EB环境即可生效。
内容的提问来源于stack exchange,提问作者Sanjayrajsinh
相关产品推荐
相关产品推荐

