我很难保存从Expo(React Native)中挑选的图像。
https://docs.expo.io/versions/latest/sdk/imagepicker.html
似乎React Native不支持将所选图像上传为blob,但确实有base64选项。
代码:
_pickImage = async () => {
let pickerResult = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
base64: true,
aspect: [4, 4],
});
this._handleImagePicked(pickerResult);
};
_handleImagePicked(pickerResult) {
const uri = pickerResult.base64;
const img = new db.File({ name: 'test.jpg', data: uri, type: 'base64', mimeType: 'image/jpg' });
db.UserData.load(this.state.UserDataID).then(UserData => {
img.upload({ force: true }).then((file) => {
UserData.photo = "https://remarkable-apple-95.app.baqend.com/v1" + file.id;
alert(file.id)
return UserData.update();
},
(error) => { alert(error); }
);
});
}
当我console.log(pickerResult.base64)
时,我得到一个看起来像base64的超长字符串,但是当它运行时,img.upload
会抛出错误并显示"PersistentError: An unexpected persistent error occurred."
答案 0 :(得分:1)
你是对的。 React Native不支持二进制数据。不幸的是,Baqend还不支持base64文件上传。
作为一种解决方法,您有两种选择:
使用React Native Fetch Blob库,通过直接通过本机代码上传和下载文件来绕过React Native不支持二进制文件的限制,并返回对这些文件的引用。您的代码可能与此类似:
ImagePicker.showImagePicker(options, async (response) => {
const upload = new db.message.UploadFile('files', 'uploadFetchBlob.jpg')
const body = 'RNFetchBlob-' + response.uri;
RNFetchBlob.fetch('PUT', 'https://{YOUR-APP-NAME}.app.baqend.com/v1' + upload.request.path, upload.request.headers, body).then((res) => {
db.File({ parent: 'files', name: 'uploadFetchBlob.jpg'}).url
})
});
不幸的是,现在不能使用expo客户端,但您必须弹出项目并使用本机代码'。
希望这有帮助