Node.js如何处理两个独立图片字段的文件上传?
Node.js多字段图片上传问题解答
关于连续使用upload.single的可行性
直接串联两个upload.single中间件的方式不可行:
app.post("/api/flowers", upload.single('image_day'), upload.single('image_night'), flowerController.createFlowerData);
upload.single每次仅处理指定字段的单个文件,且会把结果覆盖到req.file上。上述代码执行后,req.file只会保留第二个中间件处理的image_night文件,image_day的文件信息会被完全覆盖丢失,根本无法同时获取两个字段的文件。
另外你设想的req.file?[image_day].buffer写法也不成立——upload.single处理后req.file是单个文件对象,并非包含多字段的键值对结构,所以这种方式取不到对应数据。
正确实现方式:使用upload.fields
你已经采用的upload.fields是处理多字段文件上传的标准方案,写法完全正确:
app.put("/api/garden/:garden_id", upload.fields([ { name: 'image_day', maxCount: 1 }, { name: 'image_night', maxCount: 1 } ]), gardenController.editGarden);
在控制器中获取文件的方式也没问题,upload.fields会将所有上传文件整理到req.files对象中,每个字段名对应一个文件数组(即使maxCount:1也会以数组形式返回),取数组第一个元素就能拿到对应文件:
// 获取白天图片的buffer和大小 let imageDayBuffer = req.files?.image_day[0]?.buffer; const expectedSizeOfFileDay = req.files?.image_day[0]?.size; // 获取夜间图片的buffer和大小 let imageNightBuffer = req.files?.image_night[0]?.buffer; const expectedSizeOfFileNight = req.files?.image_night[0]?.size;
如果需要做参数校验,还可以先判断req.files?.image_day和req.files?.image_night是否存在,避免后续操作出现报错。
内容的提问来源于stack exchange,提问作者The Old County
相关产品推荐
相关产品推荐

