通过web worker线程实现文件下载

worker脚本

创建 work.ts 文件

const workercode = () => {
  self.onmessage = function (e) {
    fetch(e.data?.url)
      .then((res) => res.blob())
      .then((blob) => {
        self.postMessage(blob);
      });
  };
};
// 把脚本代码转为string
let code = workercode.toString();
code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'));

const blob = new Blob([code], { type: 'application/javascript' });
const worker_script = URL.createObjectURL(blob);

export default worker_script;

主线程调用

// a标签通过转换后的url下载文件(视频不会跳转)
export function daonload({ url, name }: { url: string; name: string }) {
  message.loading({ content: '下载中', key: 'down', duration: 0 });
  const myWorker = new Worker(worker_script);
  myWorker.postMessage({ url, name });
  myWorker.onmessage = function (e) {
    const a = document.createElement('a');
    const objectUrl = window.URL.createObjectURL(e.data);
    a.download = name;
    a.href = objectUrl;
    a.click();
    window.URL.revokeObjectURL(objectUrl);
    a.remove();
    message.success({ content: '下载成功!', key: 'down', duration: 2 });
    /** 关闭worker线程 */
    myWorker.terminate();
  };
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值