Изображение не отображается на устройстве iOS после загрузки через rn-fetch-blob (React native fetch blob)

Я пытаюсь загрузить небольшое изображение, используя этот фрагмент кода:

Используемый плагин: "rn-fetch-blob": "^ 0.10.14"

 RNFetchBlob.
config({
  fileCache: true,
 
}).
fetch('GET', url, {      //getting image URL from server
  // some headers ..
})
  .then((response) => {
    const base64Str = response.data;
    RNFetchBlob.fs
          .writeFile(imageLocation, base64Str, 'base64')
          .then(() => {
 
              console.log("Download successful");
           
          }).catch((err) => {
            console.log('Failed to save file. ', err);
          });

переменная imageLocation указывает на ${RNFetchBlob.fs.dirs.DocumentDir}/${filename}.

Тоже пробовал с ${RNFetchBlob.fs.dirs.CacheDir}/${filename}.

Загрузка прошла успешно, но на фотографиях устройства нет изображения.


person Sourabh Banka    schedule 10.01.2019    source источник
comment
Отвечает ли это на ваш вопрос? React native fs iOS не показывает файлы в документе каталог   -  person user4157124    schedule 19.06.2020


Ответы (2)


В iOS и документы, и каталог кеша содержатся в собственном каталоге приложения. Значит, вы не сохраняете изображение на фотографиях устройства.

Чтобы загрузить его на фотографии устройства, вам необходимо использовать CameraRoll из встроенного в response https://facebook.github.io/react-native/docs/cameraroll

import { CameraRoll } from 'react-native';

Из этого туториала Вы узнаете, как использовать CameraRoll.

https://medium.com/react-native-training/mastering-the-camera-roll-in-react-native-13b3b1963a2d

Однако суть в том, что вы можете использовать что-то вроде этого для загрузки изображений в фотопленку.

saveToCameraRoll = (image) => {
  if (Platform.OS === 'android') {
    RNFetchBlob
      .config({
        fileCache : true,
        appendExt : 'jpg'
      })
      .fetch('GET', image.urls.small)
      .then((res) => {
        CameraRoll.saveToCameraRoll(res.path())
          .then(Alert.alert('Success', 'Photo added to camera roll!'))
          .catch(err => console.log('err:', err))
      })
  } else {
      CameraRoll.saveToCameraRoll(image.urls.small)
        .then(Alert.alert('Success', 'Photo added to camera roll!'))
  }
}
person Andrew    schedule 10.01.2019

Что вы хотели сделать, так это записать изображение в кодировке base64 в файл, но вы пишете только URL-адрес изображения.

person Gene M    schedule 26.01.2021