首页 > 解决方案 > rn-fetch-blob 自动请求存储

问题描述

我尝试使用 rn-fetch-blob 下载 pdf 文件,首先我在AndroidManifest.xml中添加权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

然后我使用这段代码:

_downloadFile2 = () => {
  let DownloadDir = RNFetchBlob.fs.dirs.DownloadDir
  let options = {
    fileCache: true,
    addAndroidDownloads : {
      useDownloadManager : true,
      notification : true,
      title : "file name",
      path: DownloadDir + '/' + "fileName"+ '.' + 'pdf',
      description : 'download fileName'
    }
  }
  RNFetchBlob.config(options)
  .fetch('GET', 'link....')
  .catch((err) => {console.warn('error' + err)})
};

我的代码工作正常,但我必须手动设置存储权限,我想要的是自动请求存储,就像我想使用相机时一样它不适用于存储!

第二个想法是我不能下载我的文件两次。第一次(手动允许存储权限后)它工作正常但是当我单击按钮重新下载它时我有一个错误或者它没有任何东西取决于我所拥有的模拟器错误:1.消息警报“下载不成功' 2. 我控制台.wanr 错误,我有这个:Error: Download manager failed to download from 'link...' Status Code = 16

我认为cach有问题,但我不知道该怎么办

标签: react-native

解决方案


手动请求权限:

import { PermissionsAndroid, Platform } from 'react-native'

_downloadFile2 = async () => {
  if (Platform.OS === 'android') {
    await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE)
    await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
  }
}
// rest of the code

另外,请记住,在您没有的 iOS 上fs.dirs.DownloadDir,您应该fs.dirs.DocumentDir仅用于 iOS。


推荐阅读