我正在使用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 });
答案 0 :(得分:2)
问题是为请求的每个图像运行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) => {
// ...
});