• 解决 iOS 端小程序「saveVideoToPhotosAlbum:fail invalid video」问题


    场景复现:

    const url = 'https://mobvoi-digitalhuman-video-public.weta365.com/1788148372310446080.mp4'
    
    uni.downloadFile({
      url,
      success: (res) => {
        uni.saveVideoToPhotosAlbum({
          filePath: res.tempFilePath,
          success: (res) => {
            console.log("res => ", res);
            uni.showToast({
              title: '下载成功',
              icon: 'success'
            });
          },
          fail(err) {
            console.log("err => ", err);
            uni.showToast({
              title: '保存失败',
              icon: 'error'
            });
          },
        });
      },
      fail(err) {
        uni.showToast({
          title: '下载失败,请稍后再试',
          icon: 'error'
        });
      },
    });
    

    PC 和安卓没啥事,但是 iOS 上就会有这么个玩意出来:

    {
        errMsg: "saveVideoToPhotosAlbum:fail invalid video"
    }
    

    这个讨论中的有效信息可能是最多的,可那位说使用 compressVideo() 的老哥也没贴个实例。也尝试去用了,但是又碰到了另一个错误,真是世间 Bug 与你环环相扣=_=

    于是换了个思路,我去翻了一下 Uni 插件市场,看到了这个:「移动端-H5-小程序下载保存图片,文档和视频到手机」

    在这里插入图片描述
    它不是能成功下载吗,那我就去借鉴一下它的源码,看看它是怎么实现的。

    这个插件的源码就不说了,有兴趣自己去看,我就贴一下最终成功下载的代码:

    const url = 'https://mobvoi-digitalhuman-video-public.weta365.com/1788148372310446080.mp4';
    
    const fileName = new Date().valueOf();
    
    //  拼接本地文件路径
    const filePath = `${uni.env.USER_DATA_PATH}/${fileName}.${url.split('.').pop()}`;
    
    uni.downloadFile({
      url,
      filePath,
      success: (res) => {
        uni.saveVideoToPhotosAlbum({
          filePath: res.filePath,
          success: (res) => {
            console.log('res => ', res);
            uni.showToast({
              title: '下载成功',
              icon: 'success'
            });
            const fileMgr = uni.getFileSystemManager();
            // 删除本地文件
            fileMgr.unlink({
              filePath,
              success(r) {
                console.log('unlink-getFileSystemManager');
                console.log(r);
              }
            });
          },
          fail(err) {
            console.log('err => ', err);
            uni.showToast({
              title: '保存失败',
              icon: 'error'
            });
          }
        });
      },
      fail(err) {
        uni.showToast({
          title: '下载失败,请稍后再试',
          icon: 'error'
        });
      }
    });
    

    -END-

  • 相关阅读:
    Android 更新图标
    组合拳SSRF+redis未授权访问
    Java项目硅谷课堂学习笔记-P4前端基础知识2
    基于Springboot2.0的Dubbo入门项目(dubbo-spring-boot-starter)
    关于Java的类加载机制
    centos7虚拟机部署苍穹私有云环境记录
    Arthas简介及IDEA插件快速入门
    云原生 | 服务网格宝藏工具大推荐!
    【WebSocket】工具wscat安装和使用
    【ES6】学习笔记:正则扩展
  • 原文地址:https://blog.csdn.net/qq_49661519/article/details/139349977