如何下载到手机存储?

时间:2020-02-03 11:29:19

标签: reactjs react-native react-native-android react-native-flatlist

am使用rn-fetch-blob来获取api并将文件直接下载到我的存储中,已经创建了路径,我现在可以成功下载它,但是当我尝试打开文件时,它显示我:'无法打开文件”

以下是我的下载功能:

    download =async (item) => {
    console.log(item)
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
    )
    if (granted === PermissionsAndroid.RESULTS.GRANTED){
      let dirs = RNFetchBlob.fs.dirs;
      RNFetchBlob.config({
        fileCache: true,

        addAndroidDownloads : {
            useDownloadManager: true,
            notification : true,
            path: dirs.DownloadDir + "/Baaz_"+Math.random().toString().slice(2, 6) ,
            mime : 'application/mp4',
            mediaScannable : true,
        }
    })
.fetch('GET',  'some url'+item.nameVid,{ 'Cache-Control': 'no-store' }).then((res) => {

  alert('The file has saved!')
    console.log('The file saved to ', res.path())

})

    }
 }

我在下载图标的平面列表中调用了此函数,如下所示:

<TouchableOpacity
              onPress= {() => this.download(item)}
                style={{
                  alignItems: 'center',
                  borderRadius: 60,
                  padding: 10,
                }}>
                <Icon name="download" size={30} color="white" />
              </TouchableOpacity>

有人可以告诉我为什么吗? 我已经更新了依赖关系并添加了权限。 告诉我您是否还有其他要求。

1 个答案:

答案 0 :(得分:0)

在iOS上,它与android有所不同,您将不得不在react-native-share库旁边使用一些东西

安装后,您可以像下面这样使用RNFetchBlob:

const saveFile = async(uri, headers) => {
  const file = await RNFetchBlob.config({
    fileCache: true
  }).fetch('GET', uri, headers);
  const type = 'some/file-type';
  const base64File = await file.readFile('base64');
  const localUrl = `data:${type};base64,${base64File}`;
  await Share.open({
    localUrl
  });
  const filePath = file.path();
  await RNFetchBlob.fs.unlink(filePath);
}