Скачать образ не работает на устройстве IOS - React Native
Я реализовал функциональность для загрузки изображения в React Native с помощью RNFetchBlob. Он отлично работает с Android, но на устройстве IOS он не работает.
Ниже приведен мой собственный код реакции для загрузки.
downloadImg = (url) => {
var that = this;
async function requestCameraPermission() {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
{
title: 'Test App',
message: 'Test App needs access to your gallery ',
}
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
that.actualDownload(url);
} else {
Alert.alert('Permission Denied!', 'You need to give storage permission to download the file');
}
}
if (Platform.OS === 'android') {
requestCameraPermission();
} else {
this.actualDownload(url);
}
}
actualDownload = (url) => {
var date = new Date();
var image_URL = url;
var ext = this.getExtention(image_URL);
ext = "." + ext[0];
const { config, fs } = RNFetchBlob;
let PictureDir = Platform.OS === 'ios' ? fs.dirs.DocumentDir : fs.dirs.PictureDir;
let options = {
fileCache: true,
addAndroidDownloads: {
useDownloadManager: true,
notification: true,
path: PictureDir + "/Images/image_" + Math.floor(date.getTime()
+ date.getSeconds() / 2) + ext,
description: 'Image'
}
}
config(options).fetch('GET', image_URL).then((res) => {
console.log("Thank you","Image Downloaded Successfully.");
});
}
1 ответ
Add AndroidDownloads работает только для Android. при использовании addAndroidDownloads путь в конфигурации не бесполезен. но для ios путь нужно добавить. попробуйте следующий код, и вы можете добавить прогресс для ios.
actualDownload = (url) => {
var date = new Date();
var image_URL = url;
var ext = this.getExtention(image_URL);
ext = "." + ext[0];
const { config, fs } = RNFetchBlob;
let PictureDir = Platform.OS === 'ios' ? fs.dirs.DocumentDir : fs.dirs.PictureDir;
let options = {
fileCache: true,
path: PictureDir + "/Images/image_" + Math.floor(date.getTime() // add it
addAndroidDownloads: {
useDownloadManager: true,
notification: true,
path: PictureDir + "/Images/image_" + Math.floor(date.getTime()
+ date.getSeconds() / 2) + ext,
description: 'Image'
}
}
config(options).fetch('GET', image_URL).then((res) => {
console.log("Thank you","Image Downloaded Successfully.");
});
}
вот документ говорит:
При использовании DownloadManager свойства fileCache и path в конфигурации не вступят в силу, поскольку Android DownloadManager может хранить файлы только во внешнем хранилище, также обратите внимание, что диспетчер загрузки может поддерживать только метод GET, что означает, что тело запроса будет проигнорировано.
Этот метод работает и для iOS. Уведомление не приходит. Если вы хотите проверить, загружен он или нет, вы можете проверить его, зарегистрировав путь в терминале (Mac) или cmd(Windows) и получив доступ к нему через сам терминал. Он может не отображаться в поисковике (Mac) или проводнике (Windows).
Вы можете следовать по пути, который вы регистрируете из функции, следующим образом: cd ~/Library/Developer/CoreSimulator/Devices...