-1

我正在尝试使用这个特定的代码片段下载一个小图像:

使用的插件:“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}

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

4

2 回答 2

4

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

要将其下载到设备照片,您需要使用来自 react-native 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!'))
  }
}
于 2019-01-10T08:59:39.157 回答
0

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

于 2021-01-26T01:28:24.307 回答