解决了微信小程序图片保存到本地的问题
小程序需要将二维码保存到本地,以便用户分享进行推广。看起来是一个简单的小请求,其实问题挺多的,所以分享给大家(这里项目使用的是同一个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前端网发表,如需转载,请注明页面地址。
上一篇:如何创建小程序?遵循四个步骤 下一篇:微信小程序自定义配置顶栏顶栏搜索框
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。