Как я могу скачать файл с URL-адреса в реакции-родной для iOS - PullRequest
0 голосов
/ 09 января 2019

Я не могу загрузить изображения из URL-адреса в реактивном-родном, я использую «реагирующий-родной-блоб», он отлично работает для Android, но не для iOS. let PictureDir = fs.dirs.PictureDir; Вот PicureDir не определен для iOS.

Вот код:

const { config, fs } = RNFetchBlob;

let PictureDir = Platform.OS === 'ios' ? fs.dirs.DocumentDir : fs.dirs.PictureDir;
let options = {
  fileCache: true,
  addAndroidDownloads : {
    useDownloadManager : true, // setting it to true will use the device's native download manager and will be shown in the notification bar.
    notification : false,
    path:  PictureDir + "/me_"+Math.floor(date.getTime() + date.getSeconds() / 2), // this is the path where your downloaded file will live in
    description : 'Downloading image.'
  }
}

config(options).fetch('GET', "https://images.pexels.com/photos/67636/rose-blue-flower-rose-blooms-67636.jpeg?cs=srgb&dl=beauty-bloom-blue-67636.jpg&fm=jpg").then((res) => {
}) ;

1 Ответ

0 голосов
/ 09 января 2019

Как сказано в документации, PictureDir доступен только в Android.

https://github.com/joltup/rn-fetch-blob/wiki/File-System-Access-API#dirs

DocumentDir
CacheDir
MainBundleDir (Can be used to access files embedded on iOS apps only)
DCIMDir (Android Only)
DownloadDir (Android Only)
MusicDir (Android Only)
PictureDir (Android Only)
MovieDir (Android Only)
RingtoneDir (Android Only)
SDCardDir (0.9.5+ Android Only)

Вы должны использовать DocumentDir или CacheDir для сохранения файлов на iOS

Вы можете сделать что-то подобное, что позволит вам использовать разные каталоги в зависимости от ОС

import { Platform } from 'react-native';

...

let PictureDir = Platform.OS === 'ios' ? fs.dirs.DocumentDir : fs.dirs.PictureDir;

Обновление

Я опробовал ваш обновленный код, и он работает, однако мне пришлось сделать одну настройку.

Когда вы используете addAndroidDownloads, вы должны знать, что вы не можете установить свой собственный путь для Android.

При использовании DownloadManager, fileCache и свойств пути в конфигурации не вступит в силу, потому что Android DownloadManager может хранить только файлы на внешнее хранилище, также обратите внимание, что Download Manager может только поддержка метода GET, что означает, что тело запроса будет игнорироваться.

https://github.com/joltup/rn-fetch-blob#android-media-scanner-and-download-manager-support

Чтобы установить путь, чтобы iOS знала, где хранить файл, вы должны установить путь вне этого addAndroidDownloads объекта, чтобы ваши параметры стали такими:

let options = {
  fileCache: true,
  addAndroidDownloads : {
    useDownloadManager : true, // setting it to true will use the device's native download manager and will be shown in the notification bar.
    notification : false,
    description : 'Downloading image.'
  },
  path:  PictureDir + "/me_"+Math.floor(date.getTime() + date.getSeconds() / 2) // this is the path where your downloaded file will live in
}

Для iOS он будет игнорировать настройки в addAndroidDownloads, и файл будет сохранен в каталоге документов на устройстве, так как это заданный путь.

Если вы хотите сохранить файл в фотогалерее устройства на iOS, вам нужно будет использовать CameraRoll

Вы можете увидеть ответ, который я дал о том, как его использовать, здесь https://stackoverflow.com/a/54125033/5508175

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...