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

将多张S3图片存入MongoDB仅单张生效的技术问题

问题分析与解决方案

核心问题

你遇到的问题根源有两处:

  • 模型字段类型错误:photos被定义为String类型,仅能存储单个字符串,无法容纳多个图片地址。
  • 路由逻辑遗漏:代码仅提取了req.files[0].location(第一张图片的地址),完全没处理其余上传的图片。

修改步骤

1. 更新Product模型

将photos字段类型改为数组,以此支持存储多个图片地址:

const ProductSchema = new Schema(
  { 
    photos: [String], // 修改为数组类型
    time: { type: Date, default: Date.now },
  },
  {
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
  },
);

2. 修正POST请求处理逻辑

把所有上传图片的location收集到数组中,再赋值给product.photos:

router.post(`/products`, upload.array("photos", 3), async (req, res) => {
  try {
    // 提取全部图片的location到数组
    const photoLocations = req.files.map(file => file.location);
    let product = new Product();
    product.photos = photoLocations;
    await product.save();
    res.json({
      data: req.files,
      msg: "Successfully uploaded " + req.files.length + " files!"
    });
  } catch (error) {
    console.log(error);
    res.status(500).json({ msg: "Upload failed", error: error.message });
  }
});

验证效果

重启服务后,用Postman重新上传多张图片,查看数据库就能看到所有图片地址都被存入photos数组中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:06:30