微信小程序之保存图片之相册:saveImageToPhotosAlbum、downloadFile、授权问题

看过很多文档,解决方案都是高度的一致,但是代码贴上去就是不行....

好吧,只能一步步解析代码看哪里出了问题。

解决思路:

1.wx.downloadFile下载图片

2.wx.openSetting授权

3.wx.saveImageToPhotosAlbum图片保存到本地

 

问题点:

1.wx.saveImageToPhotosAlbum的报错信息,真机跟调试机上会出现不一致...官方文档上也没找到全面的,下面列出真机跟调试都出现的报错信息

err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response"

2.一步步下来都是ok 的,到了用户授权这一步大部分代码都是没反应,细心观察了下,授权是需要弹窗支持的....orz

解决方案:将授权方法wx.openSetting写入wx.showModal里

wx.showModal({
  title: '提示',
  content: '需要您授权保存相册',
  showCancel: false,
  success: modalSuccess => {
    wx.openSetting({
      success(settingdata) {
        console.log("settingdata", settingdata)
      },
      fail(failData) {
        console.log("failData", failData)
      },
      complete(finishData) {
        console.log("finishData", finishData)
      }
    })
  }
})

 

 

完整代码:

wx.downloadFile({
      url: e.currentTarget.dataset.src,//图片地址
      success: function (res) {
        //图片保存到本地
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: function (data) {
            wx.hideLoading()
            wx.showModal({
              title: '提示',
              content: '您的二维码已保存到相册,赶快识别二维码添加小易进行咨询吧',
              showCancel: false,
            })
          },
          fail: function (err) {
            if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
              // 这边微信做过调整,必须要在按钮中触发,因此需要在弹框回调中进行调用
              wx.showModal({
                title: '提示',
                content: '需要您授权保存相册',
                showCancel: false,
                success: modalSuccess => {
                  wx.openSetting({
                    success(settingdata) {
                      console.log("settingdata", settingdata)
                      if (settingdata.authSetting['scope.writePhotosAlbum']) {
                        wx.showModal({
                          title: '提示',
                          content: '获取权限成功,再次点击图片即可保存',
                          showCancel: false,
                        })
                      } else {
                        wx.showModal({
                          title: '提示',
                          content: '获取权限失败,将无法保存到相册哦~',
                          showCancel: false,
                        })
                      }
                    },
                    fail(failData) {
                      console.log("failData", failData)
                    },
                    complete(finishData) {
                      console.log("finishData", finishData)
                    }
                  })
                }
              })
            }
          },
          complete(res) {
            wx.hideLoading()
          }
        })
      }
    })

好了,授权有了,授权后保存图片ok,大功告成。

参考文献https://www.jianshu.com/p/77b8d520ba3f

posted @   昌子玩前端  阅读(1694)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示