video 视频下载,调用浏览器的下载进度方法

简单介绍下需求,跟上次的帖子一样,需要重写video标签的进度栏的样式,当然也包括重写下载方法,调用原生video标签下载视频的时候,浏览器会弹出下载进度条。

其实下载常用的可能利用a标签,创建一个请求就可以实现下载,但是这种下载方法死活出不来进度,可能方法使用的不对,如有好的方法可以提示我~

先看下什么时原生进度条吧

下图为调用原生时候,浏览器的下载进度提示。谷歌可能再底部出现,展示用的是Edge浏览器

展示下自定义下载方法后的效果,点击黄色下载按钮后浏览器的展示效果,除了重新自定义了视频的名称,效果跟原生的下载效果一致。

 实现方式是利用StreamSaver.js插件,页面引入后

使用 window.streamSaver.createWriteStream();方法,创建写入视频流

具体代码如下

// 视频下载,可以调用浏览器下载的进度条
    load() {
      const video = this.$refs.video; // video标签
      const url = video.src;
      return fetch(url, {
        method: 'GET',
        cache: 'no-cache'
      }).then(res => {
        const fileStream = window.streamSaver.createWriteStream('test.mp4', {
          size: res.headers.get("content-length")
        })
        const readableStream = res.body
        if (window.WritableStream && readableStream.pipeTo) {
          return readableStream.pipeTo(fileStream).then(() => console.log('done writing'))
        }
        window.writer = fileStream.getWriter();
        const reader = res.body.getReader();
        const pump = () => reader.read().then(res => res.done ? window.writer.close() : window.writer.write(res.value).then(pump));
        pump();
      })
    }

 另付上次帖子的内容☞video全屏操作栏自定义样式&&js 指定元素全屏&&视频截图下载_video全屏自定义控制_小菜花29的博客-CSDN博客

视频标签自定义下载可以通过以下代码实现: ```javascript // 视频下载,可以调用浏览器下载进度条 load() { const video = this.$refs.video; // video标签 const url = video.src; return fetch(url, { method: 'GET', cache: 'no-cache' }).then(res => { const fileStream = window.streamSaver.createWriteStream('test.mp4', { size: res.headers.get("content-length") }) const readableStream = res.body if (window.WritableStream && readableStream.pipeTo) { return readableStream.pipeTo(fileStream).then(() => console.log('done writing')) } window.writer = fileStream.getWriter(); const reader = res.body.getReader(); const pump = () => reader.read().then(res => res.done ? window.writer.close() : window.writer.write(res.value).then(pump)); pump(); }) } ``` 在这个代码中,我们使用了fetch函数来获取视频的资源,然后将其写入到一个文件流中。文件流的名字是"test.mp4",你可以根据自己的需求修改它。接着,我们使用一个循环来读取视频的数据块,并将其写入到文件流中,直到视频的所有数据都被写入完毕。这样就实现了视频标签的自定义下载功能。12 #### 引用[.reference_title] - *1* [video 视频下载调用浏览器下载进度方法](https://blog.csdn.net/jinse29/article/details/129724305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [记录自己写的一个自定义vide标签自定义控制按钮事件播放器,video标签自定义按钮](https://blog.csdn.net/qq_38652871/article/details/94584427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值