cqwcns 发表于 2021-9-4 08:00

微信小程序,保存视频到相册的问题

正在自己写一个下载无水印视频的微信小程序,已经实现解析地址和获得视频地址,并通过video组件在线播放。


到了最后一步【保存视频到相册】出了问题,保存代码是这样的。

// 保存视频到相册
bindSaveVideoToPhotosAlbum: function () {
    console.log('保存视频到相册:', that.data.thisVideoUrl)
    wx.saveVideoToPhotosAlbum({
      filePath: that.data.thisVideoUrl,
      success(res) {
      console.log(res.errMsg)
      },
      fail(res) {
      console.log('保存视频失败:', res.errMsg)
      }
    })
},

console.log输出报错是这样的:
保存视频到相册: http://tbvideo.ixiaochuan.cn/zyvd/5a/2c/6642-094d-11ec-8599-00163e02c2d6
保存视频失败: saveVideoToPhotosAlbum:fail file not exists

我们把视频地址复制到浏览器很容易就校验到视频地址是有视频的,但却报错文件不存在?不知道什么原因,请各位指教。

xiaoan87 发表于 2021-9-4 08:43

我虽然不懂 但支持你。

52pojie恒大 发表于 2021-9-4 09:17

试试readfile()不然还要配置多个视频域名到小程序
水印小程序某手不是才把某某告上法庭么
建议不要搞了

丶夜猫 发表于 2021-9-4 09:19

下载几个程序照抄啊哦不对借鉴啊

GGbond 发表于 2021-9-4 10:04

我觉得是小程序downloadFile域名问题,你解析出来的地址,必须要配进去。但是短视频很多平台不可能每个域名都找出来吧,所有我觉得要设置nginx反代。

你可以试试添加这行规则到nginx的配置文件中。
成功了告诉我,我也想搭建来玩玩。

# 根据url参数回源视频资源
    resolver 8.8.8.8; #必须
    location ~/download {
      if ($query_string ~*^(.*)url=(.*)$){
            set $url $2;
            proxy_pass $url;
      }
    }

81051006 发表于 2021-9-4 11:02

我虽然不懂 但支持你。

烟花非易冷 发表于 2021-9-4 11:10

向开发者表示敬意

aijiaxiaoxue 发表于 2021-9-4 11:15

我这个支持队列 还可以批量下载多个视频,一个更不在话下,拿去用吧
    downloadvideo(event) {
      var _this = this;
      var id = (event.currentTarget.id).split(",");
      // 获取保存到相册权限
      writePhotosAlbum(
         function success() {
          wx.showLoading({
         title: '加载中',
         mask: true
          })
          // 调用保存图片promise队列
          _this
         .queue1(id)
         .then(res => {
            wx.hideLoading()
            wx.showToast({
             title: '下载完成'
            })
         })
         .catch(err => {
            wx.hideLoading()
            console.log(err)
         })
         },
         function fail() {
          wx.showToast({
         title: '您拒绝了保存到相册'
          })
         }
      )
       },
       // 队列
       queue1(urls) {
      let promise = Promise.resolve()
      urls.forEach((url, index) => {
         promise = promise.then(() => {
          return this.download1(url)
         })
      })
      return promise
       },
       // 下载
       download1(url) {
      return new Promise((resolve, reject) => {
         wx.downloadFile({
          url: url,
          success: function(res) {
         var temp = res.tempFilePath
         wx.saveVideoToPhotosAlbum({
            filePath: temp,
            success: function(res) {
             resolve(res)
            },
            fail: function(err) {
             reject(res)
            }
         })
          },
          fail: function(err) {
         reject(err)
          }
         })
      })
       },

csp3949160 发表于 2021-9-4 11:16

期待你成功

晚空 发表于 2021-9-4 11:49

保存 的视频路径,必须是本地路径。
你可以先downloadFile获取到本地临时路径,然后再保存。
页: [1] 2
查看完整版本: 微信小程序,保存视频到相册的问题