我知道这里有很多帖子在堆栈溢出中询问req.file
没有定义,我浏览了相当多的帖子,其中大多数都是命名,我不认为这是我如何得到未定义的。
这是我的 html (pug( 我没有使用表单,因为我只是使用更改的输入
input#avatar-file(type='file', name='avatar')
button#add-avatar-btn.btn.btn-info Add Avatar
我的阿贾克斯
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,而不是在本地保存图像。
但我被困在这里。
提前感谢任何帮助。
它不起作用,因为您发送的是数组而不是文件。
做
formData.append('avatar', file[0]);
而不是
formData.append('avatar', file);