StreamSaver.js 下载视频 下载文件

需求

  1. 提供一个下载视频功能
  2. 浏览器能检测到下载动作并且有下载进度条出现

问题

  1. 使用 a 标签打开新页面下载文件,遇到 .txt 或者 .mp4 之类的文件可能就直接在页面展示了
  2. 也尝试其他的插件下载视频,视频过大,几个g的视频也有,下载慢,其次浏览器下载窗口没有监听到视频下载没有ui展示,用户往往不知道已经在下载了(用户习惯性在浏览器下载栏里查看下载进度)

解决方案

尝试了几种插件,选用StreamSaver.js,以上说的都能满足,其次还支持合并文件下载,多文件打包下载zip

CDN
打开 StreamSaver.js的仓库。
https://github.com/jimmywarting/StreamSaver.js
在这里插入图片描述

把 StreamSaver.js 文件下载到你项目里引入即可。
html复制代码<script src="../StreamSaver.js"></script>

npm
https://www.npmjs.com/package/streamsaver

npm i streamsaver

引入使用

import streamSaver from "streamsaver"

/** 下载视频
 * @param file:视频地址 必填
 * @param name:需要定义的名称 必填
 * @param postfix:文件后缀名 必填
 */
export const DownloadLocal = async (file: any, name: string, postfix: string) => {
  const fileStream = streamSaver.createWriteStream(`${name}.${postfix}`) // 这里传入的是下载后的文件名,这个名字可以自定义

  // 【步骤2】使用 fetch 方法访问文件的url,将内容一点点的放到 StreamSaver 创建的文件里
  fetch(file).then((res: any) => {
    const readableStream: any = res.body
    if (window.WritableStream && readableStream.pipeTo) {
      return readableStream.pipeTo(fileStream).then(() => console.log('done writing'))
    }

    // 【步骤3】监听文件内容是否读取完整,读取完就执行“保存并关闭文件”的操作。
    windows.writer = fileStream.getWriter()
    const reader = res.body.getReader()
    const pump = () => reader.read().then((res) => (res.done ? windows.writer.close() : windows.writer.write(res.value).then(pump)))
    pump()
  })
}

https://github.com/jimmywarting/StreamSaver.js仓库也有好多其他例子可以查看

或者看这篇博主的介绍,我也是看这篇博主测试了一遍https://juejin.cn/post/7262323026770870327

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值