(1). 提示: "saveImageToPhotosAlbum: fail not absolute path":
- 不能保存网络图片,不支持网络图片路径,可以是临时文件路径或永久文件路径
- 解决方案: a. 使用getImageInfo去下载图片,而且还需要https b. 主要是缓存在本地的时,会保存下一个临时文件 c. 再去使用这个方式去保存到本地的相册
2.授权:
(1). 逻辑分析:
- 查看用户申请过的权限中是否有"保存图片到相册": wx.getSetting(Object object) a. 获取用户的当前设置 b. 返回值中只会出现小程序已经向用户请求过的权限 c. 如果接口调用回调函数返回成功,可以查看返回值中是否有"scope.writePhotosAlbum",有表示申请过了,没有则申请权限
- 如果没有权限,需要先申请权限(弹窗授权): wx.authorize(Object object) a. 向用户发起授权请求: (1). 调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据(但不会实际调用对应接口) (2). 如果用户之前已经同意授权,则不会出现弹窗,直接返回成功 b. 如果用户同意授权则保存图片 c. 如果用户不同意,则跳转到设置页,重新授权,再保存图片
(2). 代码:
const save = () => {
Taro.showToast({
title:'正在保存图片',
icon:'loading'
})
// 判断用户是否授权"保存到相册"
wx.getSetting({
success: (res) => {
// 没有授权,发起授权
if (!res.authSetting['scope.writePhotosAlbum']) {
wx.authorize({
scope:'scope.writePhotosAlbum',
success: () => {
// 保存图片
savePhoto()
},
fail: () => {
// 用户点击拒绝授权,跳转到设置页,引导用户授权
wx.openSetting({
success: () => {
wx.authorize({
scope:'scope.writePhotosAlbum',
success: () => {
// 保存图片
savePhoto()
}
})
}
})
}
})
}else{
//如果用户已授权,直接保存到相册
savePhoto()
}
}
})
}
// 方案一:下载图片
const savePhoto=()=>{
wx.downloadFile({
url,
success:(res)=>{
wx.saveImageToPhotosAlbum({
filePath:res.tempFilePath,
success:(res)=>{
Taro.showToast({
title:'保存成功',
icon:'success'
})
}
})
}
})
}
// 方案二:读取图片资源
Taro.getImageInfo({
src: imgUrl,
success(res) {
saveImageToPhotosAlbum(res.path)
},
fail() {
Taro.showToast({
title: '获取网络图片资源失败',
icon: 'none',
duration: 2000
})
}
})