使用multer上传多文件时无法读取各文件buffer属性的求助
问题原因
你在初始化multer时指定了dest: "uploads/"参数,这会启用multer的默认磁盘存储引擎,文件会被直接写入本地磁盘的指定目录,内存中不会保留文件的二进制buffer数据,因此访问buffer属性会返回undefined。
解决方案
将multer的存储引擎替换为内存存储multer.memoryStorage(),修改路由中的multer初始化代码即可:
const express = require("express"); const router = express.Router(); const multer = require("multer"); // 替换原来的dest配置,使用内存存储 const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); const indexController = require("../controllers/index.controller"); router.post("/send", upload.array("files", 5), indexController.send); module.exports = router;
修改后req.files中每个文件对象都会携带buffer属性,值为对应文件的二进制Buffer数据。
注意事项
- 内存存储不会将文件写入本地磁盘,如果需要持久化存储文件,需要手动将Buffer写入本地或者上传到对象存储服务。
- 高并发或者上传大文件场景下使用内存存储会占用大量服务端内存,容易触发内存溢出问题,这种场景更推荐使用磁盘存储,需要读取文件内容时再通过
fs模块读取本地存储的文件即可。
内容的提问来源于stack exchange,提问作者Lakshaya U.
相关产品推荐
相关产品推荐

