react native 怎么保存base64为图片文件

react native中需要将一段base64的字符串数据转换成图片并保存到相册

现在不知道base64字符串怎么保存

在官网看到的CameraRoll组件中提供的saveToCameraRoll(tag, type)可以保存到相册
但是这个方法在android上要求tag必须是一个本地的图片或视频的uri
file:///sdcard/img.png这样的

阅读 10k
2 个回答

发现高版本的android使用这个的时候会闪退
尝试使用RNFS 却会出现问题, 还在解决中
July 13


昨天刚好用到,直接保存就好了,就是用的 CameraRoll 上网找篇文章学着配置就行了,没什么难度。

clipboard.png

遇到这个坑,已解决。 https://zhuanlan.zhihu.com/p/...
ios 直接用 CameraRoll

android :

//saveBase64ImageToCameraRoll.js
import RNFetchBlob from 'rn-fetch-blob';
import RNFS from 'react-native-fs';
import { Alert, Platform, CameraRoll } from 'react-native';

export default function (base64Img, success, fail) {
  
  const dirs =  Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath; // 外部文件,共享目录的绝对路径(仅限android)
  const downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.png`;
  const imageDatas = base64Img.split('data:image/png;base64,');
  const imageData = imageDatas[1];

  RNFetchBlob.fs.writeFile(downloadDest, imageData, 'base64').then((rst) => {
    try {
      CameraRoll.saveToCameraRoll(downloadDest).then((e1) => {
        console.log('suc',e1)
        success && success()
      }).catch((e2) => {
        console.log('fai',e2)
        Alert.alert('没有读写权限。请在[设置]-[应用权限]-[实验助手]开启')
      })
    } catch (e3) {
      // Alert.alert(JSON.stringify(e3))
      console.log('catch',e3)
      fail && fail()
    }
  });
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏