Я знаю, что здесь довольно много сообщений в stackoverflow, спрашивающих, что req.file
не определен, я просмотрел довольно много, и большинство из них называет имена, хотя я не думал, что именно так я получаю undefined.
Это мой html (мопс). Я не использую форму, поскольку я просто использую ввод при изменении
input#avatar-file(type='file', name='avatar')
button#add-avatar-btn.btn.btn-info Add Avatar
мой ajax
s = {
onClick: () => {
$('#add-avatar-btn').on('click', function (e) {
e.preventDefault();
$('#avatar-file').click();
});
},
onChange: () => {
$('#avatar-file').on('change', function (e) {
e.stopPropagation();
e.preventDefault();
let file = e.target.files;
if (file.length === 1) {
let formData = new FormData();
formData.append('avatar', file);
console.log(formData, 'formdata'); // this gives me -> FormData {} "formdata"
s.runAjax(formData);
}
});
},
runAjax: dataValue => {
$.ajax({
method: 'post',
url: '/avatar/upload',
data: dataValue,
contentType: false,
processData: false,
success: data => {
console.log(data, 'data success return');
},
error: err => {
console.log(err, 'err return ');
}
});
},
};
s.onClick();
s.onChange();
моя экспресс-часть
const multer = require('multer');
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
router.post('/avatar/upload', upload.single('avatar'), async (req, res, next) => {
try {
console.log(req.body.avatar, 'req.body.avatar'); // { avatarUrl: '[object FileList]' } 'req.body'
console.log(req.files, 'request files'); // undefined
console.log(req.file, 'single file'); // undefined
return res.json({status: true});
} catch (err) {
return next(err);
}
});
В какой части я делаю это неправильно?Я на самом деле пытаюсь использовать память, чтобы она сохранялась в виде буфера, а затем загружала ее в s3 после того, как вместо сохранения изображения локально.
Но я застряла здесь.
Заранее спасибо за любую помощь.