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

JavaScript Express 如何接收动态表单请求并将图片数据存入数组

方案1:优化前端字段命名(推荐,维护成本最低)

动态生成图片上传表单元素时,统一将name属性设为数组格式,示例如下:

<!-- EJS模板中动态插入的图片上传控件代码 -->
<input type="file" name="uploadImages[]" accept="image/*">
<!-- 若有图片描述、备注等关联字段,也用相同规则命名 -->
<input type="text" name="imageDesc[]" placeholder="输入图片描述">

后端Express如果使用multer处理文件上传,直接调用array方法即可直接拿到所有图片组成的数组,无需额外遍历:

const multer = require('multer');
// 配置存储规则,可根据需求自定义
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/uploads')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})
const upload = multer({ storage: storage })

// 路由配置
app.post('/form/submit', upload.array('uploadImages'), (req, res) => {
  // req.files 即为所有上传图片组成的数组,可直接存入数据库
  const allImages = req.files
  // 关联的图片描述也是数组,索引和图片一一对应
  const allImageDesc = req.body.imageDesc || []
  // 后续存储逻辑
})

方案2:后端遍历过滤参数(兼容前端无法修改的场景)

如果前端已经固定了参数命名规则(比如参数为img1/img2/imgN格式),可以在后端过滤所有符合前缀规则的参数:

app.post('/form/submit', upload.any(), (req, res) => {
  const imageList = []
  // 遍历所有上传文件的键名,匹配图片参数前缀
  Object.keys(req.files).forEach(paramKey => {
    // 此处前缀根据实际参数名调整,比如参数是image开头就替换为startsWith('image')
    if (paramKey.startsWith('img')) {
      imageList.push(req.files[paramKey])
    }
  })
  // imageList 即为整理好的图片数组
})

如果图片是以base64格式存在请求体中,将上述代码的req.files替换为req.body即可,过滤逻辑完全一致。

内容的提问来源于stack exchange,提问作者OnionMan1934

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:42:03