微信小程序 保存图片和复制文字 功能

1.保存图片,点击保存到手机相册里

拿到服务端返回的图片地址,用户点击按钮保存图片。这个有个小程序相册权限问题。

用户第一次拒绝的权限的时候,需要调用wx.openSeting()打开权限。

这里有个坑:2018年后,wx.openSeting()不能在失败回调里打开,需要在点击按钮时触发:

官方回复:https://developers.weixin.qq.com/community/develop/doc/000cea2305cc5047af5733de751008

所以解决的思路是:

1.每一次进入点击保存图片的页面,在onShow里默认是有权限的,

2.当用户点击保存图片时,拒绝了保存到相册的权限,我们把这个按钮提示为:打开系统保存到相册权限,跳转到wx.openSeting()打开的权限页面。

2.复制文字

这个貌似没有权限问题

3.代码

封装在一个WxUtil.js里:

const saveImg = (imgSrc, cb) => {
    wx.downloadFile({
        url: imgSrc,
        success: function(res) {
            console.log(res);
            //图片保存到本地
            wx.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: function(data) {
                    wx.showToast({
                        title: '保存成功',
                        icon: 'none'
                    })
                },
                fail: function(err) {
                    console.log('fail');
                    //不能直接用 wx.openSetting(),需要执行失败的回调
                    cb()
                },
                complete(res) {
                    console.log(res);
                }
            })
        }
    })
}

const copyText = (text) => {
    wx.setClipboardData({
        data: text,
        success(res) {
            wx.getClipboardData({
                success(res) {
                    wx.showToast({
                        icon: 'none',
                        title: '复制成功'
                    })
                }
            })
        }
    })
}

export { saveImg, copyText }

  

  在page下的页面js里调用saveImg ,在test页面下:

test.wxml:

<view>
    <view class="save-btn" bindtap="saveCord" wx:if="{{hasSetting}}">
        点我保存二维码
    </view>
    <view class="save-btn" bindtap="toSetting" wx:else>
        请在设置页面打开相册权限
    </view>
</view>

test.js:

import { saveImg } from '../../utils/wxUtil.js'
Page({
    data: {
        //是否有相册权限
        hasSetting: true
    },
    onLoad() {
        this.getPageData();
    },
    onShow() {
        this.setData({
            hasSetting: true
        })
    },
    saveCord() {
        //服务器返回的数据
        let imgSrc = this.data.userInfo.code;
        saveImg(imgSrc, () => {
            this.setData({
                hasSetting: false
            })
        })
    },
})

  

  

  

  

原文地址:https://www.cnblogs.com/xiaochongchong/p/13706823.html