Multer Express:每个请求的不同文件夹



我正在使用Multer和Express通过Ajax上传我放入blob中的图像列表。我可以在服务器端接收和保存这些图像。问题是我需要同一个 Ajax 请求的所有图像都在同一个文件夹中。我根据要求想要一个文件夹。每个文件夹都有随机的 uuid 名称。

问题是每个图像都位于不同的文件夹中。也许问题是我在 blob 中发送图像?你有解决这个问题的想法吗?非常感谢,这是我对 multer 的配置:

var storage = multer.diskStorage({
destination: function (req, file, cb) {
let path = './public/images/' + uuidv4() + '/'; //a different folder for each request
file.path = path;
fs.mkdirSync(path);
cb(null, path);
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '.' + mime.extension(file.mimetype));
}
})
let upload = multer({ storage: storage });

问题是为请求的每个图像运行destination函数,每次都会创建一个不同的 UUID,从而为每个图像创建一个新文件夹。

您需要事先将 UUID 存储在req中,以便您可以在destination函数中使用它。这将为每个请求创建一个唯一的目录。

const storage = multer.diskStorage({
destination: function (req, file, cb) {
let path = './public/images/' + req.imagesFolder + '/';
file.path = path;
fs.mkdirSync(path);
cb(null, path);
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '.' + mime.extension(file.mimetype));
}
})
const upload = multer({ storage: storage });

并且,使用中间件时:

const preuploadMiddleware = (req, res, next) => {
req.imagesFolder = uuidv4();
next();
};
app.post('/images', preuploadMiddleware, upload, (req res, next) => {
// ...
});

最新更新