Multer Express:每个请求都有不同的文件夹
Multer Express: Different folder for each request
我正在使用 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) => {
// ...
});
我正在使用 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) => {
// ...
});