Как скачать в память телефона? - PullRequest
0 голосов
/ 03 февраля 2020

я использую rn-fetch-blob для получения API и загрузки файла непосредственно в мое хранилище, создал путь, я могу успешно загрузить его сейчас, но когда я пытаюсь открыть файл, он показывает мне: «не могу открыть file '

Ниже приведена моя функция загрузки:

    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 голосов
/ 03 февраля 2020

На iOS это несколько отличается от android, вам придется использовать что-то вместе с response-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);
}
...