multer fields не сохраняет файлы

Рейтинг: 0Ответов: 1Опубликовано: 20.05.2023
const multer = require('multer');

const storage = multer.diskStorage({
destination: (req, file, cb) => {
  cb(null, 'uploads'); // Указываем путь до папки, куда сохранять файлы
},
filename: (req, file, cb) => {
  const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
  cb(null, file.fieldname + '-' + uniqueSuffix); // Генерируем уникальное имя файла
  },
});
const upload = multer({ storage: storage });
const getFiles = upload.fields([
  { name: 'fileMRT', maxCount: 1 },
  { name: 'fileKT', maxCount: 1 }
]);

module.exports.files = (req, res, next) => {

getFiles(req, res, function (err) {
    if (err instanceof multer.MulterError) {
    next(err);
    } else if (err) {
    next(err);
    }
    console.log(storage.destination) //здесь undefined
    console.log(storage.filename) //здесь undefined
    //внутри кронтроллера req.files - undefined
    next();
});
};

в форме использую

`encType="multipart/form-data"` <= React

Так же использую FormData для составления объекта с данными на клиенте все данные корректно отображаются. на сервере ошибок не возникает

const {files} = require('../middlewares/multer')
router.patch('/:cardId', files, updateCardPatientFiles)

функция updateCardPatientFiles отрабатывает без ошибок перепробовал несколько вариантов использования Multer через fields, может что-то не так с указанием пути?

Ответы

▲ 1

проблема была в клиенте

const onSubmit = (data) => {

Object.keys(data).map((key) => formData.append(key, data[key]))
Object.keys(surveyData).map((key) => formData.append(key, 
surveyData[key]))
formData.append('cardId', card._id)
formData.append('patientId', user._id)

dispatch(fetchUpdateCard(formData))
};

при составлении formData файлы добавлялись как FileList исправлено на

  const onSubmit = (data) => {
    Object.keys(data).forEach((key) => {
    if (data[key] instanceof FileList) {
      for (let i = 0; i < data[key].length; i++) {
      formData.append(key, data[key][i]);
      }
    } else {
    formData.append(key, data[key]);
  }
});

Object.keys(surveyData).forEach((key) => formData.append(key, 
surveyData[key]));
formData.append('cardId', card._id);
formData.append('patientId', user._id);

dispatch(fetchUpdateCard(formData));
};