ios - React Native Firebase 存储上传失败并出现未知错误

标签 ios firebase react-native firebase-storage react-native-firebase

我正在使用 react-native-firebase使用我们的 Firebase 帐户进行身份验证、Firestore 和存储。尝试将照片上传到存储失败并出现未知错误。这是尝试的代码:

_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 编码为“%25”,导致 putFile 代码找不到该文件。在 uri 周围添加 decodeURI 调用解决了这个问题。

let fileUri = decodeURI(pickerResult.uri)

关于ios - React Native Firebase 存储上传失败并出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612198/

相关文章:

ios - 背景 block 粒子效果

firebase - Firebase中基于多个where子句的查询

android - react-native firebase react native 应用程序构建失败

javascript - 在 React Native 中自动提交 Redux 表单

ios - 如何调整 OpenEars 错误识别

ios - 自定义 plist 文件的位置

ios - 为什么 CGImage 的 copy() 方法会在相同的内存地址上生成图像?

javascript - 如何在启动 Angular 应用程序之前等待 Firebase 身份验证

java - Firebase Java Admin SDK 初学者(从 SQL)

javascript - 如何在异步函数中测试 jest.fn().mock.calls