前端如何写进度条(上传或者下载文件的时候)

news2025/7/18 5:48:11

1.需求

在日常开发中,我们经常会遇到上传或者下载文件的需求,以下载为例:

如果后台文件是现成的,浏览器就会在底部出现下载的过程,如果点击下载后,有些业务是需要去打包,然后再下载文件的话,第一时间由于下载接口没有返回,前端没有触发下载的动作,浏览器就不会显示出来,这时前端需要在页面上显示下载进度。

2.方案

1)调用后台websoket接口,会返回下载的文件大小和文件总大小,进度就很好计算;

2)如果全部有前端完成,我们则可以使用axios的自带api完成;

3.axios-onDownloadProgress

这个方法完成交由http发送请求,自己计算大小:

onDownloadProgress: async (progress: any) => {
     console.log('返回一个对象')
}

这个对象里面一般会返回一个ProgressEvent对象如下

loaded / total就可以计算进度了;

4. 特殊情况

正如你看到的total为0了,这个一般情况,你需要和后台确认,由后台修改,由于一些原因,后台没法返回,但是会在请求头中返回一个content-range属性,那么我们改怎么处理拿到total呢?

首先,我确定了在执行onDownloadProgress方法的时候,没法拿到total了,那么我们就只能再使用fetch接口掉一次下载接口了,但是,下载接口掉了的话,我们不能去下载两次,那么有没有手动终止请求的呢,还真有:

声明一个终止的信息对象,fetch可以带一个信号AbortSignal

const controller = new AbortController();
const { signal } = controller;

fetch(url, { signal }).then((res: any) => {
    const size = res.headers.get('content-range');
    console.log('去获取文件总size')
})

然后在真正要执行下载的地方使用下面API主动终止就好。

controller.abort(); //主动终止fetch请求

这样我们就实现了前端的进度条,由于业务不同处理方式肯定不一样,作为参考即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++语法难点】 深拷贝和浅拷贝是什么,拷贝构造,拷贝赋值

文章目录1.开始:构造函数1.2 在栈区和堆区创建对象1.3 缺省构造函数1.4 类型转换构造函数1.5 拷贝构造函数1.6 缺省拷贝构造函数(浅拷贝)1.7 深拷贝构造函数 (深拷贝)1.8 拷贝赋值1.开始:构造函数 语法形式 class 类名{类名(形参…

UE5笔记【三】UE5材质Materials

材质:可以将材质看作是StaticMesh上面的绘画。这副绘画Paint是由图层组成的,这些图层形成了所谓的物理基础渲染(Physically Based Rendering OR PBR)。这些PBR的特殊之处在于:几乎可以让我们模拟显示世界中的任何材质。…

「Redis数据结构」QuickList

「Redis数据结构」QuickList 文章目录「Redis数据结构」QuickList一、前言二、概述三、结构四、小结一、前言 在前面一章,我们已经学习了ZipList压缩列表,ZipList虽然节省内存,但也引发了不少问题。 问题1:ZipList虽然节省内存&am…

【Bio】基础生物学 - 细胞 cell

文章目录1. 细胞2. 原核细胞 真核细胞3. 细胞器4. 细胞核5. 动物细胞5.1 细胞质5.2 核糖体5.3 内质网6. 植物细胞6.1 液泡6.2 线粒体6.3 叶绿体Ref1. 细胞 生命系统的结构层次依次为: 细胞 (cell)\blue{\text{细胞 (cell)}}细胞 (cell) →\rightarrow→ 组织 (tiss…

玩转MySQL:程序中的“田氏代齐”,InnoDB为何能替换MyISAM?

引言 MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole..... 不过虽然各款…

[附源码]java毕业设计全国人口普查管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode刷题复盘笔记—一文搞懂746. 使用最小花费爬楼梯(动态规划系列第二篇)

今日主要总结一下动态规划的一道题目,746. 使用最小花费爬楼梯 题目:746. 使用最小花费爬楼梯 题目描述: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择…

Linux之关于Nginx

目录 1、什么是Nginx? 1.1、负载均衡:流量分摊​编辑 1. 2、反向代理 :处理外网访问内网问题 1.3、动静分离:判断动态请求还是静态请求,选择性的访问指定服务器 2、Nginx的使用 2.1.Nginx安装 2.1.1 添…

11月27日PMI认证才聚各考点防疫要求,PMP考生必看

11月27日深圳才聚、珠海才聚、东莞才聚、南宁才聚防疫要求及如下: 注意:由于疫情防控影响,以下城市的考试将延期举办,该考点的考生无需做任何操作。 北京、天津、石家庄、廊坊、保定、哈尔滨、大庆、呼和浩特、太原、郑州、兰州…

【王道计算机网络笔记】计算机网络体系结构-计算机网络概述

文章目录计算机网络的概念计算机网络的功能计算机网络的组成计算机网络的分类标准化工作及相关组织相关组织计算机网络的性能指标速率带宽吞吐量时延时延带宽积往返时延RTT利用率计算机网络的概念 计算机网络:是一个分散的、具有独立功能的计算机系统,通…

[附源码]java毕业设计汽车租赁系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

绿竹生物获上市“大路条”:融资不搞研发去理财,孔健下什么棋?

11月19日,绿竹生物发布消息称,该公司于2022年11月11日获得中国证监会关于首次公开发行境外上市外资股(H股)及境内未上市股份全流通(即“大路条”)的批复,下一步将根据香港联交所的聆讯进度安排及…

【JavaSE】接口

前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行 如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步! 如果觉得博主文章还不错的话,希望三连支持&#xff01…

web课程设计网页规划与设计----公司官网带轮播图 (页面精美 1页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS&#…

垃圾回收相关概念概述(宋红康JVM学习笔记)

System.gc() 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对…

java 基于springBoot上传文件/文件夹使用实例

最近项目中遇到一个文件批量上传的需求,对单个的文件、多文件或者文件夹的方式上传文件都可以满足要求,总结一下使用经验。 案例基于springBoot. 1、文件上传请求 这里postman测试了单文件和多文件的上传,同时测试了文件件方式上传。 postman…

物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制OLED ssd1306屏幕,此处使用的是I2C协议,大家可自行百度学习一下I2C。 二、环境 ESP32 OLED ssd1306屏幕 Thonny IDE(或者WOKWI在线仿真) 几根杜邦线 本次使用在线仿真…

vue 项目在加载完成之前,显示预置加载动画

vue 项目在加载完成之前,显示预置加载动画 自己有一个日记项目,由于服务器带宽很小1MB,在加载之前页面中显示是空白的,就想给它加个前置的动画,这个用户体验更好。 一、实现 1. 定义项目入口 如果你是 pwa 应用&am…

[附源码]计算机毕业设计JAVA化妆品销售管理系统

[附源码]计算机毕业设计JAVA化妆品销售管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM myba…

SQL语句的约束 总结

目录 基本概念 主键约束 概念 操作 自增长约束 概念 操作 非空约束 概念 操作 唯一约束 概念 操作 默认约束 概念 操作 零填充约束 概念 约束总结 基本概念 主键约束 概念 主键约束相当于 唯一约束 非空约束 的组合,主键约束列不允许重复&am…