Objective: 要成功将BASE64图像数据传递到我的node / express后端,以便我可以将其上传到Microsoft Azure存储 .
Issue: 发送图像数据时未点击 endpoints ,catch块表示图像未上传,并且未记录console.log . 当我只发送文件扩展名时, endpoints 被成功命中(控制台记录用户obj) . 据我所知,我需要将图像BASE64数据上传到Azure以在整个应用程序中使用 .
Stack:
-
React-Native(^ 0.54.0)
-
节点/快递
-
Microsoft Azure存储
-
Postgres(sequelize ": " ^ 4.33.2)
我使用 'react-native-image-picker' 来访问用户相机,返回的照片对象如下所示:
Object {isVertical: false, origURL: "assets-library://asset/asset.JPG?id=ED7AC36B-A150-4C38-BB8C-B6D696F4F2ED&ext=JPG", longitude: -19.5112, data: "/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAA…paLbTp1up3fnf8jjajOztyvlV0ldN23+NWvpoklpsr2P/2Q==", fileName: "IMG_0005.JPG"…}
data:(...)
fileName:(...)
fileSize:(...)
height:(...)
isVertical:(...)
latitude:(...)
longitude:(...)
origURL:(...)
timestamp:(...)
uri:(...)
width:(...)
数据字段包含我认为需要传递给后端的BASE64图像数据,以便将其上传到我的Azure存储 . 下面是应该将适当的数据发送到后端的客户端函数 .
export function uploadUserPhoto(photoData, photoExt, id) {
return dispatch => {
dispatch(authProgress());
axios.patch(`${API_URL}/users/upload_profile_photo/${id}`, {
headers: {
'Accept': 'image/jpeg',
'Content-Type': 'image/jpeg'
},
user: {
imageData: photoData,
imageFileName: photoExt
}
})
.then(response => {
dispatch({type: USER_PHOTO_UPLOAD, payload: response.data});
Actions.Profile()
Alert.alert("Upload success!");
})
.catch(error => {
dispatch({ type: USER_PHOTO_UPLOAD_FAILED, payload: error });
Alert.alert("Upload failed! Please try again!");
});
};
}
我可以确认photoData,photoExt已成功传递到具有图像数据和文件名的函数中 . 节点端如下所示:
router.patch('/upload_profile_photo/:id', async(req, res) => {
console.log(req.body.user)
const paths = await profilePicUpload(req.body.user, req.params.id );
await models.User.update({image: paths },
{ where : {id: req.params.id} });
const userInfo = await models.User.findById(req.params.id);
try {
res.send(userInfo)
}
catch(err) {
console.log(err)
}
});
有什么建议?我看过使用 new FormData() 但没有运气 . 阅读其他帖子,有些表明 Headers 问题,但我不知道这是怎么回事 .
谢谢 .