一、一定要指定文件本地存储路径(不管图片还是文件),否则安卓机保存图片会一直失败,主要原因是微信临时路径带了.unkown后缀,而苹果机不会,
具体路径如下
( filePath: wx.env.USER_DATA_PATH+ '/' + title.replace('/', '_') + '.png',)
二、然后wx.authorize的弹窗在拉起一次拒绝申请之后就不会再触发,则需要进行权限判断去wx.openSetting跳转去设置,设置里面只会出现请求过的权限,只有允许访问保存图片功能才能成功调用 wx.saveImageToPhotosAlbum
三、如果还是不成功,尝试一下让后端返回的response的content-type为'application/png',
具体代码如下:
wx.getSetting({
success(res: any) {
if (res.authSetting['scope.writePhotosAlbum'] === false) {
wx.showModal({
title: '权限申请',
content: '为保证你正常使用该功能,请前往系统设置开启图片保存相关权限。',
confirmText: "去设置",
confirmColor: '#3693EF',
success(modalres: any) {
if (modalres.confirm) {
wx.openSetting({
success(settingdata) {
console.log(settingdata)
if (settingdata.authSetting["scope.writePhotosAlbum"]) {
console.log("获取权限成功,再次点击图片保存到相册")
} else {
console.log("获取权限失败")
}
}
})
}
}
})
}
else {
wx.authorize({
scope: 'scope.writePhotosAlbum',
success() {
let filePath = wx.env.USER_DATA_PATH
wx.downloadFile({
url: 获取资源的请求,
filePath: filePath + '/' + title.replace('/', '_') + '.png',
header: {
'accessToken': wx.getStorageSync('STORAGE_SESSION_KEY') || '',
'content-type': 'application/png',
},
success(ret) {
console.log(ret);
if (ret.statusCode === 200) {
wx.saveImageToPhotosAlbum({
filePath: ret.filePath,
success: function () {
wx.showToast({
title: '保存成功,请前往系统相册查看',
icon: 'success',
duration: 2000
});
},
fail: function (ren) {
wx.showToast({
title: '图片保存失败',
icon: 'error',
duration: 2000
});
}
})
}
},
fail: function () {
wx.showToast({
title: '图片保存失败',
icon: 'error',
duration: 2000
});
},
complete: () => {
wx.hideLoading()
}
})
}
})
}
}
})