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) => {
  // ...
});