微信小程序保存视频到本地相册和保存时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(){}
})

齐活!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,572评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,071评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,409评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,569评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,360评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,895评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,979评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,123评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,643评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,559评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,742评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,250评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,981评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,363评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,622评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,354评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,707评论 2 370

推荐阅读更多精彩内容