代码之家  ›  专栏  ›  技术社区  ›  davidethell

React Native Firebase存储上载失败,出现未知错误

  •  10
  • davidethell  · 技术社区  · 8 年前

    我在用 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文件在bucket中结束,而不是实际的照片,然后抛出错误。

    看起来这个问题被跟踪了几次,但没有解决:

    https://github.com/invertase/react-native-firebase/issues/1177

    https://github.com/invertase/react-native-firebase/issues/302

    1 回复  |  直到 8 年前
        1
  •  1
  •   davidethell    8 年前

    终于找到了我的问题。来自ImagePicker的映像的uri中包含来自本地应用程序缓存的“%”字符。此百分比正被uri编码为%25,这导致putfile代码找不到该文件。在uri周围添加decodeuri调用修复了该问题。

    let fileUri = decodeURI(pickerResult.uri)
    
    推荐文章