Express中通过Axios发送Base64图片触发maxFieldsSize超限错误
解决Express中multipart/form-data传Base64图片的maxFieldsSize超限错误
错误根源
你碰到的Error: maxFieldsSize 2097152 exceeded,是因为multipart/form-data表单里单个字段的大小超过了默认2MB限制。而你之前配置的bodyParser.text、express.json、bodyParser.urlencoded这些中间件完全不处理multipart类型的请求,express.bodyParser更是早已被废弃,所以这些配置根本没起作用。
解决方案:用multer处理multipart请求
Express官方推荐使用multer来处理multipart/form-data类型的请求,它能直接配置字段大小限制:
- 安装multer
npm install multer
- 替换原有无效中间件,配置multer
删掉你之前那些没用的中间件代码,换成下面的配置:
const multer = require('multer'); // 配置单个字段的最大大小(这里设为500MB,可根据需求调整) const upload = multer({ limits: { fieldSize: 500 * 1024 * 1024 // 500MB,单位为字节 } }); // 全局应用multer,处理所有multipart请求 app.use(upload.any());
如果只想针对特定路由处理:
// 比如给/post-image路由配置multipart处理 app.post('/post-image', upload.any(), (req, res) => { // 从req.body中获取Base64图片字段 const base64Image = req.body.image; // 后续业务逻辑 res.send('图片接收成功'); });
- Axios发送请求的注意点
确保Axios正确构造请求,不要手动设置Content-Type,让Axios自动处理边界标识:
const formData = new FormData(); formData.append('image', base64ImageString); axios.post('/your-api-endpoint', formData, { headers: { // 不要手动加这行:'Content-Type': 'multipart/form-data',Axios会自动处理 } });
关键说明
multer的limits.fieldSize就是对应报错里的maxFieldsSize,按需调整数值即可。- 彻底弃用旧的
bodyParsermultipart相关配置,完全用multer替代。
内容的提问来源于stack exchange,提问作者Gabriel Costa
相关产品推荐
相关产品推荐

