微信小程序保存图片没有权限跳到授权页面

时间:2024-03-06 13:26:41

保存图片

方法一:wx.downloadFile + wx.canvasToTempFilePath +
wx.saveImageToPhotosAlbum;
方法二:wx.getImageInfo +
wx.canvasToTempFilePath + wx.saveImageToPhotosAlbum

wx.downloadFile:下载文件资源到本地,仅支持https的链接地址。成功的回调函数会返回一个临时的文件地址,即:res.tempFilePath。更多参数见官方文档DownloadTask wx.downloadFile(Object object);
wx.getImageInfo:获取图片信息,成功的回调函数中会图片的本地路径,即:res.path。更多参数见官方文档wx.getImageInfo(Object object);
wx.canvasToTempFilePath:把当前画布指定区域的内容导出生成指定大小的图片。成功的回调中会返回图片的临时地址,即:res.tempFilePath。更多参数见官方文档wx.canvasToTempFilePath(Object object, Object this;
wx.saveImageToPhotosAlbum:保存上一步的图片到系统相册,成功时会直接保存图片到相册中。更多参数见官方文档wx.saveImageToPhotosAlbum(Object object)

当用户点击上面的保存海报按钮后,若用户是第一次使用,此时会有一个弹窗提醒用户授权。如果用户点击了拒绝,无论再怎么点保存海报的按钮(清空缓存可绕过),都不会有弹窗提醒且会直接进入fail中,所以必须要调用wx.getSetting这个API,判断res.authSetting的授权结果中是否有scope.writePhotosAlbum。有且值为true则表示同意保存到相册,否则就要再次提醒用户开启权限。

 

//保存二维码
  qrcodesaveimg(){
    var that = this
    Promise.all([that.downLoadImage(that.data.posterInfo.qrcode)]).then((res)=>{
      console.log(that.data,"图片路径",res[0])
      let imgurl = res[0]
      wx.getSetting({
        success (res) {
          console.log(res.authSetting[\'scope.writePhotosAlbum\'],res)
          if(res.authSetting[\'scope.writePhotosAlbum\'] ||res.authSetting[\'scope.writePhotosAlbum\']==undefined){
            console.log("1111",res[0])
            wx.saveImageToPhotosAlbum({
              filePath: imgurl,
              success: (e) => {
                wx.showToast({
                  title: \'保存成功\',
                  duration: 2000
                });
              }, fail: (e) => {
                console.log("失败",e)
              }
            })
          }else{
            wx.openSetting({
              success(res) {}
            })
          }
        }
      })
    })
  },

 

//下载图片返回本地连接
downLoadImage(url) {
    return new Promise((resolve, reject) => {
      wx.downloadFile({
        url: url,
        success: (res) => {
          if (res.statusCode === 200) {
            resolve(res.tempFilePath)
          }
        }
      });
    })
  },