Multer Express: разные папки для каждого запроса - PullRequest
0 голосов
/ 17 октября 2018

Я использую 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 });

1 Ответ

0 голосов
/ 18 октября 2018

Проблема заключается в том, что для каждого изображения запроса запускается функция 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) => {
  // ...
});
...