Изображение не отображается на устройстве iOS после загрузки через rn-fetch-blob (Реагировать на встроенный BLOB-объект) - PullRequest
0 голосов
/ 10 января 2019

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

Используется подключаемый модуль: "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}.

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

1 Ответ

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

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

Чтобы загрузить на устройство фотографии, вам нужно использовать CameraRoll от реактивной системы 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!'))
  }
}
...