ios – React Native Firebase存储上载因未知错误而失败

前端之家收集整理的这篇文章主要介绍了ios – React Native Firebase存储上载因未知错误而失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 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)

猜你在找的iOS相关文章