将多张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
相关产品推荐
相关产品推荐

