首页 > 系统相关 >vue文件下载调取浏览器下载进程

vue文件下载调取浏览器下载进程

时间:2023-12-12 17:12:10浏览次数:30  
标签:文件 vue 浏览器 streamsaver res window const 下载

fetch+streamSaver
前端在使用axios发送网络请求时,如文件下载,无法实时获取当前已经下载的文件流,只有当后端返回全部流时,才能在浏览器右下角显示已经完成的进度。 但是当文件很大时,就会出现长时间的等待,而且不显示下载进度。 此时可以通过fetch来发送网络请求实时获取已经下载的文件流, 同时需要依赖一个第三方npm包 streamsaver

通过npm install streamsaver下载插件

 1 import streamSaver from "streamsaver"
 2  
 3  
 4 export const downloadFile = (data,filename) => {
 5   return fetch(`/files/download?paths=${data}`,{
 6     method:'GET',
 7 }).then(res=>{
 8     // 创建写入流 filename为下载的文件名 
 9     const fileStream=streamSaver.createWriteStream(filename,{
10         size:res.headers.get("content-length")
11     })
12     const readableStream=res.body;
13     if(window.WritableStream&&readableStream.pipeTo){
14         return readableStream.pipeTo(fileStream).then(()=> {
15  
16         })
17     }
18     window.writer=fileStream.getWriter();
19     const reader=res.body.getReader();
20     const pump=()=>reader.read().then(res=>res.done? 
21     window.writer.close():window.writer.write(res.value).then(pump))
22     pump();
23 })
24 }

 

标签:文件,vue,浏览器,streamsaver,res,window,const,下载
From: https://www.cnblogs.com/Swlymbcty/p/17897337.html

相关文章

  • 在Vue中使用HappyPack
    在Vue中使用HappyPack1、介绍HappyPack由于有大量文件需要解析和处理,构建是文件读写和计算密集型的操作,特别是当文件数量变多后,Webpack构建慢的问题会显得严重。运行在Node.js之上的Webpack是单线程模型的,也就是说Webpack需要处理的任务需要一件件挨着做,不能多个事情一......
  • vue实现打印功能
    1.安装插件npminstallvue-print-nb--save2. main.js中全局引入importPrintfrom'vue-print-nb'Vue.use(Print);3.页面中使用<el-dialog:visible.sync="openCodeCard"width="40%"class="offset-dialog"append-to-body:sho......
  • three.js 3d模型使用|vue项目使用three.js
    three.js3D模型使用安装安装three.jsnpminstallthree安装轨道控件插件npminstallthree-orbit-controls安装加载.obj和.mtl文件的插件npminstall--savethree-obj-mtl-loader安装渲染器插件npminstall--savethree-css2drender导入import*asThreefrom......
  • 浏览器中导出导入证书,https网站报非安全链接
    1、查看证书信息2、点击“网站非安全链接”3、点击“证书信息”,然后导出。4、保存证书至文件夹5、打卡Internet选项,找到内容-证书6、找到“受信任的根证书颁发机构”点击导入。7、找到导出的证书文件,导入即可。......
  • vue3 对子组件使用 v-model,关于绑定对象的问题
    这里有最基本的使用,vue3官网组件v-model我来讲讲注意事项,如果你v-model的是个reactive创建的对象,那么将不起作用,必须得是ref创建的对象要知道,v-model:<inputv-model="searchText"/><!--等价于--><input:value="searchText"@input="searchText=$event.ta......
  • java实现文件上传和下载
    本文实例为大家分享了java实现文件上传和下载的具体代码,供大家参考,具体内容如下文件的上传upload:文件上传客户端通过表单的文件域file 把客户端的文件上传保存到服务器的硬盘上页面首先对上传的表单有以下要求:必须有文件域:inputtype=file表单提交方式:method=post表......
  • blob 下载文件type是否必须设置
    又遇到了一件鬼打墙的事,欲哭无泪。1几天前,有个bug:blob文件下载,如果下载非txt文件,比如图片、xlsx,下载后的文件无法正确显示。//下载文件asyncdownload(row,prop){constres=awaitresourceDownload(row[prop.field+"fileId"]);//res为blob......
  • websocket使用方法|vue实时推送
    WebSocket实时推送创建一个WebSocket对象:准备变量mounted(){//初始化consturi=window.location.href;//获取网页urlconstprotocol=uri.split("/")[0];//https:确定当前传输协议constdomain=uri.split("/")[2];//Iip:portconstwsPr......
  • vue 逻辑分页
    <template><div><divclass="paging"><!--数据显示区域--><divclass="data"><!--表格存放数组中的数据,并对数据进行截取,以控制每一页显示的数据量--><!--slice(start,end)不包括end--><el-ta......
  • VueRouter中存储路由的参数是什么?
    一、VueRouter的基本介绍什么是VueRouter是一个Vue.js官方的路由管理器,它可以帮助我们在Vue.js应用中实现页面之间的导航和跳转。它提供了一系列的API和配置选项,使得我们可以更加灵活地管理和控制应用的路由。在VueRouter中,存储路由的参数主要是通过路由对象来实现的。每当我们进行......