如何在Express/Node.js中使用Multer实现多文件上传
多文件上传正确配置方案(Multer 1.4.5)
问题排查
你的代码存在两个核心问题:
- 前端文件输入的
name为photo1/photo2/photo3,但后端Multer配置中写的是foto1,字段名不匹配 - 仅配置了单个文件字段,未包含另外两个需要上传的文件
正确配置步骤
1. 初始化Multer实例
先确保你已正确初始化Multer实例(若未初始化),这里以内存存储为例(对应你读取buffer的需求):
const multer = require('multer'); // 内存存储模式,文件会暂存为buffer const campos = multer({ storage: multer.memoryStorage() });
2. 修正路由的Multer中间件配置
在路由中补充所有前端定义的文件字段,确保字段名完全匹配:
router.post('/anunciar', campos.fields([ { name: 'photo1' }, { name: 'photo2' }, { name: 'photo3' } ]), async function(req, res, next) { // 正确访问每个上传的文件 if (req.files.photo1) { console.log('photo1的buffer:', req.files.photo1[0].buffer); } if (req.files.photo2) { console.log('photo2的buffer:', req.files.photo2[0].buffer); } if (req.files.photo3) { console.log('photo3的buffer:', req.files.photo3[0].buffer); } // 后续业务逻辑 res.status(200).send('文件上传成功'); });
关键说明
req.files中的每个字段对应一个数组(即使单字段仅传一个文件),因此需要用[0]获取单个文件的buffer- 若需单字段支持多文件上传,可在
fields配置中添加maxCount属性,例如{ name: 'photo1', maxCount: 3 },但你的场景为三个独立字段,无需此配置 - 前端表单已正确设置
enctype="multipart/form-data",这是文件上传的必要条件
内容的提问来源于stack exchange,提问作者Diego Alves
相关产品推荐
相关产品推荐

