小程序后端返回buffer前端转为base64图片并下载

476 阅读1分钟
  1. 使用base64js文件 import polyfill from '../../utils/base64.js' const {atob,btoa} = polyfill.Base64;

2.生成二维码的方法

handleSetCode() {
 let params = this.$store.state.appId
 this.isQrCodeShow = true
 let _parentAgentId = uni.getStorageSync('agentId')
 this.$api.agent.geterweiCode(params).then(res => { //axios请求自己封装的
	 let token = res.data
	 uni.request({
	 url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + token, // 微信定义的格式
	 method: 'POST',
	 responseType: 'arraybuffer',// 一定要注意这里,必须是这样
	 data: {
            "page": "pages/share/share", // 扫二维码跳转的页面
            "scene": `id=${_parentAgentId}`, //微信定义的传参方式
            "check_path": true,
            "env_version": "release"
        },
        success: async (res) => {
            const base64String = btoa(String.fromCharCode(...new Uint8Array(res.data)))
            this.qrcodeImg = 'data:image/jpeg;base64,' + base64String // 转为base64位
        }
})
})
}

  1. 长按图片下载得方法 需要授权
handleLongpress(e) {
    let url = this.qrcodeImg;
    var that = this;
    //用户需要授权
    wx.getSetting({
        success: (res) => {
            if (!res.authSetting['scope.writePhotosAlbum']) {
                wx.authorize({
                    scope: 'scope.writePhotosAlbum',
                    success: () => {
                            // 同意授权,保存图片
                            that.saveImg(url);
                    },
                    fail: (res) => {
                            console.log(res)
                    }
                })
            } else {
                // 已经授权了
                that.saveImg(url);
            }
        },
        fail: (res) => {
            console.log(res)
        }
    })
    },
    saveImg(url) {
    var that = this;
    var fm = wx.getFileSystemManager(); //是获取文件管理器对象
    fm.writeFile({
        filePath: wx.env.USER_DATA_PATH + '/qCode.png', //创建一个临时文件的文件名
        data: url.slice(22), //把 data:image/png;base64,这一段去除
        encoding: 'base64',
        success: res => {
        // 保存到相册
        wx.saveImageToPhotosAlbum({
            filePath: wx.env.USER_DATA_PATH + '/qCode.png',
            success: function(res) {
                uni.showToast({
                        title:'已保存',
                        icon:'none'
                })
                },
                fail: function(err) {
                        console.log(err)
                }
            })
            console.log(res)
        },
        fail: err => {
            console.log(err)
        }
    })
    }