#node.js #ajax #file-upload #multer
#node.js #ajax #загрузка файла #мультер
Вопрос:
Я пытаюсь отправить как массив файлов изображений, так и некоторые входные значения с помощью ajax в код узла js. ajax:
const addForm = document.querySelector('#addForm');
let fd = new FormData();
addForm.addEventListener('submit', (event) => {
event.preventDefault();
const newProduct = {
Cost: document.getElementById('addPcost').value,
Size: document.querySelectorAll('[name="size"]:checked')[0].value,
Material: document.querySelectorAll('[name="material"]:checked')[0].value,
Color: document.getElementById('addPcolor').value,
Category: document.querySelectorAll('[name="category"]:checked')[0].value
}
imageFiles.forEach(image => {
fd.append("image", image);
});
fd.append("info", JSON.stringify(newProduct));
$.ajax({
type: "POST",
url: "/addproduct",
dataType: 'json',
contentType: false,
processData: false,
data: fd,
success: () => {
Notiflix.Notify.Success("new product added successfully.");
},
error: (textStatus, err) => {
Notiflix.Notify.Failure('<h2>Internal Server Error</h2><br>' 'text status ' textStatus ', err ' err);
}
});
});
и это код на стороне узла js:
app.post('/addproduct', (req, res) => {
upload(req, res, (err) => {
if(err) {
console.log(err);
}else {
console.log(req.body);
}
});
});
ПРИМЕЧАНИЕ: функция загрузки предназначена для multer
когда я отправляю данные, multer возвращает ошибку:
Ошибка MulterError: неожиданное поле
код: ‘LIMIT_UNEXPECTED_FILE’, поле: ‘image’, ошибки хранилища: []
почему это происходит? как я могу загрузить массив файлов изображений и данных формы с помощью ajax в node js? пожалуйста, покажите мне, есть ли лучший способ.
заранее спасибо.
Редактировать: конфигурация multer:
const storage = multer.diskStorage({
destination: './public/images',
filename: (req, file, cb) => {
cb(null, file.fieldname '-' Date.now() path.extname(file.originalname))
}
});
const upload = multer({
storage: storage
}).array("pImg");
Комментарии:
1. Можете ли вы добавить
Multer
конфигурацию в вопрос?2. Я только что решил проблему. имя массива, которое я использовал для multer, не совпадало с полем FormData. изменил его на image, а затем я изменил req.body.image на req.files, и теперь я получаю результаты. Это была просто глупая ошибка. решение заняло 4 часа. Я опубликовал все коды, кроме той части, которая была сломана. извините.