Code前端首页关于Code前端联系我们

解决了微信小程序图片保存到本地的问题

terry 2年前 (2023-09-22) 阅读数 90 #移动小程序

小程序需要将二维码保存到本地,以便用户分享进行推广。看起来是一个简单的小请求,其实问题挺多的,所以分享给大家(这里项目使用的是同一个Taro小程序)。

步骤

看一下文档,发现很完整,而且非常简单。

代码如下

// 图片下载
async downloadImage() {
  try {
    /**
    * @param {String} src  网络图片地址
    */
    const { path } = Taro.getImageInfo({ src })

    // 保存到相册
    const saveRet = await Taro.saveImageToPhotosAlbum({ filePath: path })

    if(saveRet.errMsg == 'saveImageToPhotosAlbum:ok') {
      Taro.showToast({
        title: '图片保存成功'
      })
    }
    
  } catch (error) {
    console.log(error)
  }
}
复制代码

看似完成,实际上还早。这仅仅是开始,激动人心的时刻还在后头。

授权

调用相册需要用户授权。如果用户授权就可以了。如果没有授权(用户选择拒绝),则无法再下载图片,并且不会显示任何提示。用户体验非常糟糕。我应该怎么办?毛呢布料。 微信小程序图片保存到本地一次问题解决

最好的方法是引导用户。如果用户选择退出,当用户重新访问此页面时,我们会将下载按钮替换为授权专辑。指导用户手动打开相册权限才能下载图片。 微信小程序图片保存到本地一次问题解决

代码贴出来供大家参考

async openSetting() {
  // 打开设置(手动授权)
  const ret = await Taro.openSetting()
  if(ret.authSetting['scope.writePhotosAlbum']) {
    this.setState({
      writePhotosAlbum: true // 权限开启状态
    })
  }
}
复制代码

兼容性

本以为就这样完了,结果奈何QA同学又发现了,在部分安卓手机上无法下载。点击保存结果是No没有反应(无法识别文件类型)。

我发现实际上是getImageInfo造成的。该方法无法获取图像信息并报错。我惊慌失措,寻找替代方案。 downloadFile用于在本地缓存文件并存储临时地址。由于图像实际上属于文件,尝试看看是否可以用这种方法实现。 ?商业转载请联系作者获得许可。非商业转载请注明来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门