React-Native使用CameraRoll将图片保存到相册

3 篇文章 0 订阅
1 篇文章 0 订阅
使用CameraRoll将图片保存到相册在ios和android上的实现有一些差别。
首先CameraRoll有一个CameraRoll.saveToCameraRoll(tag, [type]);方法,可以将一张图片保存到相册中,

参数tag在ios和android上也有些不一样。

ios

对于ios来说,tag可以是任意图片的uri比如网络地址url或者base64,也可以是本地视频文件的URI.

所以对于ios来说,保存图片到相册,只需调用CameraRoll.saveToCameraRoll方法即可。

Android

在Android上,tag参数表示图片的本地uri,也就是说saveToCameraRoll方法只接受本地图片uri作为参数,如file:///data/com.example.apps/test.png。

所以对于网络图片来说,需要先将图片保存下来,再使用saveToCameraRoll方法推到相册中。

  • 怎么保存呢?如果图片是base64的形式,则可以使用rn-fetch-blob库的RNFetchBlob,具体如下:
const dest = RNFetchBlob.fs.dirs.DCIMDir + new Date().getTime() + ".png";
RNFetchBlob.fs.writeFile(dest, CommonHelper.realImageBase64String(uri), 'base64').then(res => {
    CameraRoll.saveToCameraRoll(`file://${dest}`).then(_ => {
        // save success
    }).catch(error => {
        // save fail
}).catch(error => {
    // do something
});

static realImageBase64String(s: string): string {
    const pattern = /^data:image\/\S{1,};base64,/;
    const matches = s.match(pattern);
    if (matches && matches.length > 0) {
        const arrays = s.split(matches[0]);
        return arrays[1];
    }

    return '';
}
  • 如果图片是远程url,则按如下方法来保存
RNFetchBlob.config({ fileCache: true, appendExt: 'png' }).fetch('GET', uri, {}).then(res => {
    const localUri = res.path().startsWith('file://') ? res.path() : `file://${res.path()}`;
    CameraRoll.saveToCameraRoll(localUri).then(_ => {
        // 保存成功
    }).catch(error => {
        // 保存失败
    });
}).catch(error => {
    // 没有访问外部存储权限
});
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值