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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:06:17