Multer req.files не определен при отправке данных через ax ios, но при использовании Postman все работает - PullRequest
0 голосов
/ 27 марта 2020

Мне нужно опубликовать массив изображений и одно изображение для предварительного просмотра продукта. Здесь мои настройки мультера

const multer = require('multer');

// Multer settings
const storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, './uploads/');
  },
  filename: function(req, file, cb) {
    cb(null, file.originalname);
  }
});

const fileFilter = (req, file, cb) => {
  // reject a file
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
    cb(null, true);
  } else {
    cb(null, false);
  }
};

const upload = multer({
  storage: storage,
  fileFilter: fileFilter
});

const multerSettings = upload.fields([{ name: 'thumb', maxCount: 1 }, { name: 'images', maxCount: 8 }]);

module.exports = multerSettings;

Моя модель для размещения данных. Я использую MongoDB

thumb: {
  url: String
},
images: [{url: String}]

Клиентская часть

const fd = new FormData();
const { images, thumb } = state.details;
fd.append('thumb', thumb);
fd.append('images', images);
await this.$axios.post('/product', fd);

Изображения представляют собой массив файлов [File, File, File], и ​​по какой-то причине req.files ['images' ] на сервере не определено, но thumb работает правильно. И когда я посылаю те же данные через почтальона, все работает как положено. В браузере в предпросмотре заголовка я вижу следующие данные

thumb: (binary)
images: [{},{},{}]

Может быть, изображения должны быть массивом двоичных данных? И при отправке одного файла, подобного этому

fd.append('images', images[0]);

req.files ['images'], он работает правильно. Мне нужно как-то изменить мой массив на клиенте. Я понятия не имею, что мне делать.

Буду благодарен за любые советы

1 Ответ

0 голосов
/ 27 марта 2020

Решение довольно простое.

const fd = new FormData();
const { images, thumb } = state.details;
fd.append('thumb', thumb);;
for(let i = 0; i < images.length; i++) {
   fd.append('images', images[i]);
}
await this.$axios.post('/product', fd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...