multer fields не сохраняет файлы
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 шт):
Автор решения: Nikita Zuev
→ Ссылка
проблема была в клиенте
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));
};