最近在开发一个视频和工具类的小程序,类似于小年糕,需要实现将用户制作的影集保存到本地手机的相册上,页面效果如下:
实现的逻辑如下:
1. 获取用户授权, 如果之前已授权直接下载。
2. 如果用户之前没有授权,则调起用户授权界面,让用户授权,用户同意则下载,不同意则提示。
3. 如果之前调起授权了,但是用户拒绝了,打开设置界面,引导用户开启授权。
以下是代码实现,欢迎大家复制粘贴和吐槽。
首先是WXML代码,
<view class="album-operate"> <view class="edit" bindtap="deleteAlbum" data-id="{{item.id}}" data-status="{{item.status}}">删除</view><button class="save" data-link="{{item.link}}" data-status="{{item.status}}" bindtap='downloadAlbum'>保存/下载</button><view class="share" bindtap="desabledShare" wx:if="{{item.status==2}}">分享</view><button class="share" open-type="share" data-id="{{item.id}}" data-cover="{{item.cover_url}}" data-name="{{item.name}}" wx:if="{{item.status!=2}}">分享</button>
</view>
以下是JS代码
// 授权下载
downloadAlbum: function(e) {var that = this;// 影集状态var status = e.target.dataset.status;// 下载链接的地址var link = e.target.dataset.link;if (status == 2) {wx.showToast({title: '影集正在制作中,请等待',icon: 'none'});} else {// 获取用户授权wx.getSetting({success(res) {// 如果已授权if (res.authSetting['scope.writePhotosAlbum']) {that.saveAlbum(link);// 如果没有授权 } else if (res.authSetting['scope.writePhotosAlbum'] === undefined) {// 调起用户授权wx.authorize({scope: 'scope.writePhotosAlbum',success() {that.saveAlbum(link);},fail() {wx.showToast({title: '您没有授权,无法保存到相册',icon: 'none'})}})// 如果之前授权已拒绝} else {wx.openSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {that.saveAlbum(link);} else {wx.showToast({title: '您没有授权,无法保存到相册',icon: 'none'})}}})}}})}
},// 保存影集
saveAlbum: function (link) {wx.downloadFile({url: link,success(res) {if (res.statusCode === 200) {var path = res.tempFilePathwx.saveVideoToPhotosAlbum({filePath: path,success(res) {if (res.errMsg == 'saveVideoToPhotosAlbum:ok') {wx.showToast({title: '下载完成',})}}})}}})
},