React Native Firebase存储-尝试使用.putFile()保存图像时出现错误

时间:2020-01-26 05:15:22

标签: react-native firebase-storage react-native-firebase

我正在尝试将手机中的本地图像保存到Firebase存储中,但是出现以下错误。

Permission Denial: reading com.google.android.apps.photos.contentprovider/........uid=XXXXX requires the provider be exported, or grantUriPermission()

请参见以下代码。 await imageRef.putFile(localUri, {contentType: 'image/jpg'});是发生问题的地方

const uploadImageAndGetUrl = async (localUri, firebasePath) => {
  try {
    const imageRef = storage().ref(firebasePath);
    await imageRef.putFile(localUri, {contentType: 'image/jpg'});
    const url = await imageRef.getDownloadURL();
    return url;
  } catch (err) {
    Alert.alert('Profile.js.....Error getting image url from FB', err);
  }
};

清单如下:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

2 个答案:

答案 0 :(得分:1)

解决方案1:

import RNFetchBlob from 'rn-fetch-blob'

async function getPathForFirebaseStorage (uri) {
  if (Platform.OS==="ios") return uri
  const stat = await RNFetchBlob.fs.stat(uri)
  return stat.path
}
const fileUri = await getPathForFirebaseStorage(file.uri)
  const uploadTask = ref.putFile(fileUri)

解决方案2:

import RNFS from 'react-native-fs'

const data = await RNFS.readFile(uri, 'base64')
await ref.putString(data, 'base64')

注意:如果上述解决方案不起作用,请使用react-native-permissions库确保来自用户的READ_EXTERNAL_STORAGE权限

答案 1 :(得分:0)

我不确定它是源路径问题还是有关权限的问题。您是否已将所需的权限添加到Manifest.xml文件中。