我使用
react-native-firebase来使用我们的Firebase帐户进行身份验证,防火墙和存储.尝试将照片上传到存储失败,出现未知错误.这是尝试的代码:
_pickImage = async () => { await this.getCameraRollPermission() let result = await ImagePicker.launchImageLibraryAsync({ allowsEditing: true,aspect: [4,3],}); console.log(result); if (!result.cancelled) { // this.setState({ photoURL: result.uri }); this._handlePhotoChoice(result) } }; _handlePhotoChoice = async pickerResult => { let userId = this.state.userId firebase .storage() .ref('photos/profile_' + userId + '.jpg') .putFile(pickerResult.uri) .then(uploadedFile => { console.log("Firebase profile photo uploaded successfully") }) .catch(error => { console.log("Firebase profile upload failed: " + error) }) }
在iOS模拟器中测试并使用调试器来检测错误我刚刚收到此错误:
"Error: An unknown error has occurred. at createErrorFromErrorData (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2371:17) at blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2323:27 at MessageQueue.__invokeCallback (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2765:18) at blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2510:18 at MessageQueue.__guardSafe (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2678:11) at MessageQueue.invokeCallbackAndReturnFlushedQueue (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2509:14) at http://localhost:19001/debugger-ui/debuggerWorker.js:70:58"
更新:
文件上传到存储桶,但该文件不是JPEG照片,而是有关该文件的JSON内容:
{"contentType":"image\/jpeg","name":"photos\/profile_XPIO2lHjlYbdLPchACZHBsmY9Jr1.jpg"}
所以不知何故,JSON文件最终在桶中而不是实际照片中,然后抛出错误.
看起来这个问题被跟踪了几次,但没有解决:
https://github.com/invertase/react-native-firebase/issues/1177
https://github.com/invertase/react-native-firebase/issues/302
解决方法
终于找到了我的问题.来自ImagePicker的图像的URI在本地应用缓存中具有’%’字符.此百分比被URI编码为’%’,导致putFile代码找不到该文件.在uri周围添加decodeURI调用修复了问题.
let fileUri = decodeURI(pickerResult.uri)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。