微信小程序保存视频到本地相册和保存时downloadFile:fail:url not in domain list

最近写个视频详情页,有下载视频的功能,百度一堆文档,但是千篇一律的都看不太明白,总归是太菜了,从头开始研究一番

第一步

需要查询用户的授权情况,获取用户设置 wx.getSetting()
返回值中只会出现小程序已经向用户请求过的权限。
authSetting.png

授权总结了三种情况:

1.用户从来没有授权过,res.authSetting[’scope.writePhotosAlbum’]===undefined
需要wx.authorize:提前向用户发起授权请求。调用后弹出弹框向用户询问授权,如果用户已经授权,就不会弹出弹框,直接success

wx.authorize({
    
    
    scope:'scope.writePhotosAlbum',
    success(){
    
    
        //保存视频
    },
    fail(){
    
    
        //提示:拒绝授权后不能保存视频到相册    
    }
})

2.用户授权过之后又关闭授权,!res.authSetting[’scope.writePhotosAlbum’]
需要wx.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序向用户请求过的权限。(openSetting在模拟器不起作用,需要真机调试)

wx.openSetting({
    
    
    success(res){
    
    
        //用户手动打开保存视频权限
          if(res.authSetting['scope.writePhotosAlbum']){
    
    
              //保存视频
              return          
          }
          wx.showToast({
    
    title:'未授权,无法保存到相册',icon:'none'})
    },
    fail(){
    
    
        //提示授权失败
    }
})

3.用户已经授权,可以直接保存

第二步

下载视频
1.要先下载到本地获取临时路径

let fileName = new Date().valueOf();
wx.downloadFile({
    
    
   url: link,
 	filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
  	success(res){
    
    
          //保存res.filePath
   }
})

2.用临时路径保存到相册

wx.saveVideoToPhotosAlbum({
    
    
    filePath,
    success(){
    
    
        //保存成功,删除临时文件    
    },
    fail(){
    
    
        //保存失败    
    }
})

3.成功后再删除临时文件

let fileMgr = wx.getFileSystemManager();
fileMgr.unlink({
    
    //删除临时文件
     filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
})

完整代码

//保存视频
handleDownload(){
    
    
 let fileName = new Date().valueOf();
 wx.downloadFile({
    
    
  url: link,
  filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
  success: res => {
    
    
   let filePath = res.filePath;//下载到本地获取临时路径
   wx.saveVideoToPhotosAlbum({
    
    //保存到相册
    filePath,
    success: file => {
    
    
     wx.showToast({
    
    
      title: '保存成功',
      icon: 'success',
      duration:3000
     })
     let fileMgr = wx.getFileSystemManager();
     fileMgr.unlink({
    
    //删除临时文件
      filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4',
     })
    },
    fail: err => {
    
    
     wx.showToast({
    
    
      title: '保存失败',
      icon: 'none'
     });
    },
    complete() {
    
    
     wx.hideLoading()
    }
   })
  },
  fail(e) {
    
    
   wx.showToast({
    
    
    title: '保存失败',
    icon: 'none'
   });
  },
  complete() {
    
    
   wx.hideLoading();
  }
 })  
}
//获取用户授权
getUserSetting(){
    
    
    wx.showLoading({
    
    
      title: '加载中...',
      mask: true,
    });
    let that=this
    wx.getSetting({
    
    
        success(res){
    
    
        	if(res.authSetting['scope.writePhotosAlbum'] === undefined){
    
    
            wx.authorize({
    
    
                scope: 'scope.writePhotosAlbum',
                success() {
    
    
                    console.log('打开了授权')
                    that.handleDownload()
                },
                fail(err) {
    
    
                    wx.showToast({
    
    
                        title: '授权失败',
                        icon: 'none'
                    });
                }
            })      
         	}else if(!res.authSetting['scope.writePhotosAlbum']){
    
    
                wx.openSetting({
    
    
                    success(res) {
    
    
                        console.log(res)
                        if (res.authSetting['scope.writePhotosAlbum']) {
    
    
                        	console.log('授权了')
                        	that.handleDownload()
                        } else {
    
    
                            wx.showToast({
    
    
                                title: '您没有授权,无法保存到相册',
                                icon: 'none'
                            })
                        }
                    },
                    fail(err) {
    
    
                        wx.showToast({
    
    
                            title: '授权失败',
                            icon: 'none'
                        });
                    },
                })         
          	}else{
    
    
              that.handleDownload()            
           }                
        },
        fail(){
    
    
            wx.showToast({
    
    
              title: '加载失败',
              icon: 'none'
            });       
        },
        complete(){
    
    
            wx.hideLoading()        
        }   
    })
}

tips:最后遇到了个小问题,在保存时downloadFile fail了,输出error是downloadFile:fail:url not in domain list
模拟器和真机调试都没问题,体验版会报错
问题就是没有配置downloadFile合法域名
把校验关掉,模拟器就能提示错误了
hefajiaoyan.png
然后在开发设置里面配置服务器域名的downloadFile合法域名,一定是downloadFile合法域名,配置在request里面是没有用的
还有一种情况,就是url是http开头,替换掉就好了

link = "http.....".replace("http:","https:")
 wx.downloadFile({
    
    
      url:link ,
      success(){
    
    },
      fail(){
    
    }
})

齐活!!

猜你喜欢

转载自blog.csdn.net/glorious_future/article/details/112394709