通过rn-fetch-blob(React native fetch blob)下载后,图像未在iOS设备中显示

时间:2019-01-10 06:31:12

标签: react-native download react-native-ios 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}

下载成功,但设备照片中没有图像。

2 个答案:

答案 0 :(得分:1)

在iOS上,文档和缓存目录都包含在应用程序自己的目录中。因此,您不会将图像存储在设备照片中。

要将其下载到设备照片,您需要使用本机https://facebook.github.io/react-native/docs/cameraroll的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!'))
  }
}

答案 1 :(得分:0)

您想要做的是将 base64 编码的图像写入文件,但您写入的只是图像 url。