如何解决UnhandledPromiseRejectionWarning: TypeError: 无法读取未定义的属性“缓冲区”
我正在努力将图像从 React Native 上传到 mongodb。我收到上述错误。我可以通过邮递员上传图片。下面是处理照片上传的 NodeJS 路由
router.post(
"/users/profile/photo",auth,upload.single("profilePhoto"),async (req,res) => {
console.log(req);
const buffer = await sharp(req.file.buffer)
.resize({ width: 250,height: 250 })
.png()
.toBuffer();
req.user.profile_photo = buffer;
await req.user.save();
res.send();
},(error,req,res,next) => {
res.status(400).send({ error: error.message });
}
);
这是来自 react native 的代码
const profilePhoto = userData.images[0].replace("file:/","");
if (profilePhoto.length !== 0) {
const data = new FormData();
data.append("profilePhoto",profilePhoto);
const res = await userApi.uploadProfilePhoto(data);
if (!res.ok) {
console.log(res);
alert(res.data.error);
return;
}
}
const uploadProfilePhoto = (photo) =>
client.post(`${usersEndpoint}/profile/photo`,photo,{
"Content-Type": "multipart/form-data; ",});
谁能帮我排查我在这里做错了什么
编辑 我正在添加过去的部分请求,这些请求不会根据 React Native 的请求退出
file: {
fieldname: 'profilePhoto',originalname: 'profile-pic.jpg',encoding: '7bit',mimetype: 'image/jpeg',buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff e1 00 8c 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 05 01 12 00 03 00 00 00 01 00 01 ... 223959 more bytes>,size: 224009
},
来自 Postman 的代码
var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('profilePhoto',fs.createReadStream('/C:/Users/user/Downloads/node-course-images/node-course-images/profile-pic.jpg'));
var config = {
method: 'post',url: '127.0.0.1:3000/users/profile/photo',headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MDA1YmQ0NzkyYTQ1ZDU0ZjA1Y2MwYjUiLCJzdXBlcnVzZXIiOnRydWUsInJvbGUiOiJhZG1pbiIsIm5hbWUiOiJQYXVsIE11dGVzaGkiLCJlbWFpbCI6InN1cGVyQGdtYTlsLmNvbSIsInBob25lIjoiMDcyMjMwNDIyMyIsImlhdCI6MTYxMTk0Mzc2N30.c633qRqz-kQ00duMMJTZzW14hWsLf2Tt6nya_tWfWEY',...data.getHeaders()
},data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
解决方法
尝试将上传功能更改为:
const uploadProfilePhoto = (photo) =>
client.post(`${usersEndpoint}/profile/photo`,{
headers: {
'Accept': 'application/json','Content-Type': 'multipart/form-data',},body: photo,}
});
请发布此功能和旧功能的响应。
,版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。