在react native
中需要将一段base64
的字符串数据转换成图片并保存到相册
现在不知道base64
字符串怎么保存
在官网看到的CameraRoll
组件中提供的saveToCameraRoll(tag, type)
可以保存到相册
但是这个方法在android
上要求tag
必须是一个本地的图片或视频的uri
如file:///sdcard/img.png
这样的
在react native
中需要将一段base64
的字符串数据转换成图片并保存到相册
现在不知道base64
字符串怎么保存
在官网看到的CameraRoll
组件中提供的saveToCameraRoll(tag, type)
可以保存到相册
但是这个方法在android
上要求tag
必须是一个本地的图片或视频的uri
如file:///sdcard/img.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()
}
});
}
6 回答4.7k 阅读✓ 已解决
4 回答8.7k 阅读
5 回答7.1k 阅读✓ 已解决
5 回答8.2k 阅读
2 回答10.3k 阅读✓ 已解决
2 回答10.5k 阅读✓ 已解决
4 回答11.1k 阅读
发现高版本的android使用这个的时候会闪退
尝试使用RNFS 却会出现问题, 还在解决中
July 13
昨天刚好用到,直接保存就好了,就是用的 CameraRoll 上网找篇文章学着配置就行了,没什么难度。