小程序下载到本地相册(vue2)

1.首先需要判断手机相册权限有没有打开

   获取用户授权相册权限

   用到的方法:uni.getSetting   

                        wx.authorize   (不跳转,会有一个弹框,选择是否打开权限)

                        wx.openSetting  (跳转到设置页面手动打开)

  

//获取用户授权相册权限
		onStartDownload(downLoadUrl) {
			uni.showLoading({
			        title: '加载中...',
			   })
		    console.log("aaaaaaaaaaaaaaaaaaa")
		    uni.getSetting({
		      success: (res) => {
                  // 他第一次进入获取权限的时候返回的是undefined,弹出是否获取权限
                  // 点击拒绝时第二次进入时会返回false,直接跳转到权限页面
				  console.log(res.authSetting['scope.writePhotosAlbum'])
		        if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
                  // 弹出授权弹框
                  // scope.writePhotosAlbum 保存到相册属性
		          wx.authorize({
		            scope: 'scope.writePhotosAlbum',  
		            success: () => {
		              console.log('打开了授权')
                      //这个方法是调用下载的方法(自己定义的)
		              this.downGetCaremaEvent(downLoadUrl)
		            },
                    // 点击拒绝时进入
		            fail: (err) => {
		              console.log('授权失败:', err)
					  uni.showToast({
					  	title: '授权失败',
					  	icon: 'none',
					  	duration: 2000//持续的时间
					  })
		            }
		          })
		        } else if (!res.authSetting['scope.writePhotosAlbum']) {
                  // 调取设置页面
		          wx.openSetting({
		            success: (res) => {
		              console.log('openSetting成功回调:res', res)
		              if (res.authSetting['scope.writePhotosAlbum']) {
		                    console.log('授权了')
                            //这个方法是调用下载的方法(自己定义的)
		                    this.downGetCaremaEvent(downLoadUrl)
		              } else {
					        console.log("未授权")
		              }
		            },
		            fail: (err) => {
		 
		            },
		          })
		        } else {
                  //这个方法是调用下载的方法(自己定义的)
		          this.downGetCaremaEvent(downLoadUrl)
		        }
		      }
		    })
			uni.hideLoading();
		  },

2.接着开始做下载功能

以上代码   this.downGetCaremaEvent(downLoadUrl)  调用的就是下载的方法

需要先获取到相册权限才可以下载

用到的方法:uni.downloadFile

                      wx.saveVideoToPhotosAlbum  (保存到相册)

        //封装上传视频到本地
		downGetCaremaEvent(downLoadUrl){
			uni.showLoading({
			        title: '加载中...',
			   })
			let fileName = new Date().valueOf(); //获取当前的时间戳,独一无二的特性,用来命名
			console.log(wx.env.USER_DATA_PATH + '/' + fileName + '.mp4')
			wx.downloadFile({
			      url: downLoadUrl, // 视频资源地址
			      filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
			      // header: {
			      //   "Content-Type":"video/mp4"
			      //   },
			      success: res => {
			        console.log('downloadFile成功回调res:', res)
			        wx.hideLoading()
			        let FilePath= res.filePath; // 下载到本地获取临时路径
			        let fileManager = wx.getFileSystemManager();
			        // 保存到相册
			        wx.saveVideoToPhotosAlbum({ // 保存到相册
			          filePath: FilePath,
			          success: file => {
			            // console.log('saveVideoToPhotosAlbum成功回调file:', file)
			            wx.showToast({
			              title: '视频保存成功',
			              duration: 3000,
			              icon: 'none'
			            })
			            fileManager.unlink({ // 删除临时文件
			              filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
			            })
			          },
			          fail: err => {
			            // console.log('saveVideoToPhotosAlbum失败回调err:', err)
			            fileManager.unlink({ // 删除临时文件
			              filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4'
			            })
			            wx.showToast({
			              title: '视频保存失败',
			              duration: 3000,
			              icon: 'none'
			            })
			          },
			          complete() {
			            wx.hideLoading()
			          }
			        })
			        //
			      },
			      fail(e) {
			        console.log('失败e', e)
			        wx.showToast({
			          title: '视频保存失败',
			          duration:3000,
			          icon:'none'
			        })
			      },
			      complete() {
			        // wx.hideLoading();
			      }
			})
		},

(注:在获取到权限之后才可以调用下载到本地的方法)

3.最后做点击事件调用方法

        //点击下载按钮
		downEvent(downLoadUrl,cartStatus){
            //调用获取权限的方法
            //我把下载的功能在权限调取成功里面调用的
			this.onStartDownload(downLoadUrl)
		},

代码中downLoadUrl是后端给传来的一个下载链接,这个链接放在浏览器里可以直接下载

4.除了以上的代码,还需要配置域名

微信公众平台 ——> 开发管理 ——> 服务器域名 ——>downloadFile合法域名

域名地址必须和发版的那个地址是一样的

尤其是https 少一个s都不行

如果配置的地址和线上的地址不一样就直接走了downloadFile方法的fail里面,找问题的时候就非常麻烦,我一直以为是域名没有配置完,后来发现后端返回来的视频下载地址http没有携带s,跟域名地址不匹配,所以直接进不去     注意!!!踩坑!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值