我是用uni-app写的小程序,如果使用源生小程序api的方法是需要修改的。我的需求是从小程序下载图片,我会调用uni.downloadFile把文件下载下来,然后用uni.saveImageToPhotosAlbum下载图片到系统相册。这两个方法还是比较简单的。因为用户没有授权,而导致下载下载失败,会弹出popup这个弹窗,popup可以去下载一个插件。为什么要自己画一个弹窗而不是直接调用uni.openSetting()这个方法,是因为微信为了防止开发者滥用此接口,使用户在无任何操作时,不断地强行跳转至设置页,导致用户无法正常使用甚至无法退出小程序。其他详细的说明,和其他的调用方法可以看这里:https://developers.weixin.qq.com/community/develop/doc/000cea2305cc5047af5733de751008 。有下载的文件的时候,开发者设置里面的downloadFile合法域名必须正确添加好域名,不然不能下载
<template>
<view class="container">
<view @tap="downloadIMG" class="btn">保存体验码</view>
<uni-popup ref="popup" :maskClick='false'>
<view class="popup">
<view class="popup-text1">提示</view>
<view class="popup-text1">下载失败需要您授权保存相册</view>
<view class="jh-align-center popup-text2">
<view @tap="close">取消</view>
<view @tap="authorization">确认</view>
</view>
</view>
</uni-popup>
</view>
</template>
methods: {
downloadIMG() {
uni.downloadFile({
url: this.codeUrl,
success: (res) => {
uni.showLoading({
title: '正在下载'
})
if(res.statusCode == '200') {
let filePath = res.tempFilePath
uni.saveImageToPhotosAlbum({
filePath,
success: (res)=> {
console.log(res);
uni.hideLoading()
uni.showToast({
title: '下载成功'
})
},
fail: (err)=> {
uni.hideLoading()
this.open()
}
});
}
},
fail: (err) => {
uni.showToast({
title: '下载失败'
})
}
})
},
authorization() {
uni.openSetting()
this.close()
},
open() {
this.$refs.popup.open()
},
close() {
this.$refs.popup.close()
}
}
写漏了一段,补上。使用uni.openSetting()之前判断一下用户有没有把相册功能关闭,如果关闭了再执行方法
uni.getSetting({
success:res=>{
this.status = res.authSetting['scope.writePhotosAlbum']
}
})