前端结合 react axios 获取真实下载、上传进度

vue+axios+el-progress(elementUI组件)实现下载进度条实时监听(小白简洁版) 其实还是踩了很多坑的,什么XHR等等,经过实验,以上方法就可以简便实现功能。开始接收响应数据时,会定期触发该回调函数,以提供下载进度信息。以上,便可以实现一个下载进度条监听的功能,是一个回调函数,它作为参数传递给。请让后端在响应头中加上。 阅读详情

首页确保项目中使用了axios

axios ondownloadprogress中total总为零,content-length不返回?

点我查看 Axios Documention

 npm i axios
 yarn add axios

以下我们举例接口调用配置说明:

由于接口下载时,不确定文件下载时长,所以直接设置不限时

 timeout: -1,

由于 axios 已提供下载与上传的回掉函数(callback),所以我们直接调用就好

import { useState } from "react"

type ProgressStatusType = "normal" | "active" | "success" | "exception"

interface TestReportState {
  showProgressModal: boolean
  downloadPercent: number
  downloadStatus: ProgressStatusType
}

const [showProgressModal,setShowProgressModal] = useState<boolean>(false)
const [downloadPercent,setDownloadPercent] = useState<number>(0)
const [downloadStatus,setDownloadStatus] = useState<ProgressStatusType>("normal")

// 外层调用
const downloadFile = async (filename: string): Promise<void> => {
  try {
	setShowProgressModal(true)
    setDownloadStatus("active")
    const res = await downLoadFileTemp({ filename }, state)
    setDownloadStatus("success")
    downloadFileAction(filename, res)
  } catch (error) {
    setDownloadStatus("exception")
    console.error("downloadFile->", error)
  }
}

export const downLoadFile = (params: { filename: string }, setDownloadPercent:()=>void ): Promise<Blob> => {
  return get(`api/getFile?${qs.stringify(params)}`, {
    timeout: -1, // 不限时
    onDownloadProgress: (progressEvent: ProgressEvent) => {
		setDownloadPercent(calcProgress(progressEvent)) 
    },
    onUploadProgress:  (progressEvent: ProgressEvent) => {
    // Do whatever you want with the Axios progress event
    
  },
  })
}

为了提高代码互用性与可维护性所以将计算进度的逻辑做了封装

/**
 * 计算进度条百分比
 */
export const calcProgress = (progressEvent: ProgressEvent): number => {
  const { loaded = 0, total = 0 } = progressEvent || {}
  return Math.ceil((loaded / total) * 100) || 0
}

你可能有疑惑 progressEvent 中所含有的字段,请看以下示例:


/**
 * Events measuring progress of an underlying process, like an HTTP request (for an XMLHttpRequest, or the loading of the underlying resource of an <img>, <audio>, <video>, <style> or <link>).
 *
 * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent)
 */
interface ProgressEvent<T extends EventTarget = EventTarget> extends Event {
    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/lengthComputable) */
    readonly lengthComputable: boolean;
    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/loaded) */
    readonly loaded: number;
    readonly target: T | null;
    /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/total) */
    readonly total: number;
}

axios ondownloadprogress中total总为零,content-length不返回?

  1. 后端在header中加上content-length
  2. 如果使用了Gzip做了文件分块获取到的 content-length 也可能是不准确的,所以可以让后端将此信息新建一个字段解决 例如:
response header {
	...
	custom-content-length: 2040
}
【前端文件下载】直接下载和在浏览器显示下载进度的下载方法_java 前端a标签下载,要文件传输完了才会显示下载信息(1) 其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)《前端开发四大模块核心知识笔记》最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】 阅读详情

相关推荐

React中为什么选择Axios而非fetch进行HTTP请求

HTTP客户端是前端与后端通信的基础能力,其设计直接影响错误处理、鉴权统一、请求取消、上传进度控制等工程实践质量。Axios并非简单语法糖,而是面向REST API场景的厚抽象——通过请求/响应拦截器实现横切关注点集中治理,依托Promise与async/await天然契合React异步数据流,支持动态header注入、自动JSON序列化、标准化错误分类(如502 Bad Gateway可精准区分网关故障与业务异常)。相比原生fetch,Axios降低的是团队协作中的认知负荷与维护熵值,尤其在中大型Reac

weixin_30616969的博客 431

vue3 + axios 实现带进度条的下载对话框

vue3中实现下载进度框

曲折旅程,艰难人生 3601

Axios流式数据处理:原理、实现与优化实践

流式数据处理是现代Web开发中提升传输效率的关键技术,其核心原理是将数据分割为连续小块进行渐进式传输。相比传统请求方式,流式处理能显著降低内存占用并提高实时性,特别适用于大文件传输、实时日志推送等场景。Axios作为主流HTTP客户端,通过responseType: 'stream'配置和pipe()方法实现高效的流式传输。本文深入解析Node.js与浏览器环境下的流式实现差异,分享进度监控、内存泄漏预防等实战技巧,并探讨在聊天应用、文件校验等场景中的高级应用方案。针对性能优化,提供了缓冲区调整、并发控制等

weixin_33391446的博客 255

使用axios实现实时获取文件上传/下载进度。实现文件上传,下载进度条显示

下载文件实现进度条显示 利用axios封装的原生onDownloadProgress属性,该属性为一个回调方法,当axios请求将文件从服务器下载时会进行回调。接收一个回调参数,该回调参数中包含总下载进度,当前下载进度。不多比比直接上代码 <template> <div> <button @click="downLoad">下载</button> <p> 下载进度:{{downLoadProgres

weixin_54000091的博客 1万+

前端HTTP请求工具选型:Fetch与Axios深度对比

HTTP请求是前端开发的核心技术,涉及数据获取、API交互等基础功能。Fetch API作为现代浏览器原生解决方案,提供了基于Promise的异步请求机制,其设计遵循Web标准且无需额外依赖。Axios则是功能丰富的第三方HTTP客户端,提供拦截器、自动转换JSON等高级特性。在工程实践中,选择合适工具需考虑项目规模、错误处理需求、TypeScript支持等因素。对于需要精细控制请求行为的场景,Fetch配合AbortController可实现请求中断;而企业级应用往往更青睐Axios的拦截器体系和多实例管

weixin_30417487的博客 387

前端批量下载与压缩实战:基于JSZip和FileSaver的完整解决方案

本文详细介绍了在前端实现批量下载与文件压缩的完整解决方案,核心是使用JSZip和FileSaver库。文章阐述了该方案如何减轻服务器压力并提升用户体验,提供了从基础实现到支持混合数据源、进度条、文件结构组织等高级功能的实战代码,并探讨了在Vue/React框架中的集成应用以及常见问题排查。

weixin_29012677的博客 297

axios 下载大文件时,展示下载进度的组件封装——js技能提升

axios 下载大文件时,展示下载进度的组件封装——js技能提升

yehaocheng520的博客 1137

基于前端技术栈的轻量级制品管理工具UI设计与实现

在现代软件工程实践中,制品管理是DevOps工具链中不可或缺的一环,它负责对构建产物进行统一存储、版本控制和分发。其核心原理在于通过标准化的仓库和API,为持续集成/持续部署(CI/CD)流程提供可靠、可追溯的产出物源。这一技术对于提升团队协作效率、保障构建一致性和加速交付流程具有重要价值,尤其适用于需要管理npm包、Docker镜像、通用组件库等多元制品的开发场景。本文聚焦于如何利用现代前端技术(如React、TypeScript)构建一个界面友好、易于集成且支持私有化部署的轻量级制品管理门户,深入剖析了

weixin_33795743的博客 356

axios上传下载进度监听

【代码】axios上传下载进度监听。

qq_60654563的博客 43

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8983

前端大文件上传如何做到刷新续传?

参考文章:http://blog.ncmem.com/wordpress/2023/10/11/%e5%89%8d%e7%ab%af%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%a6%82%e4%bd%95%e5%81%9a%e5%88%b0%e5%88%b7%e6%96%b0%e7%bb%ad%e4%bc%a0%ef%bc%9f/可以在此事件中执行与连接相关的操作。在 http://Socket.IO 中,客户端和服务端都有一些系统事件。

weixin_45525177的博客 242

SCU【C】程序设计基础期末安全项目lab2-Deadbeef-writeup(附题目&源码)

项目名称(本质:栈溢出攻击)【源码在文首】和lab1一样,此题又是美国卡耐基梅隆大学的平时作业哈哈哈! 项目要求是把栈溢出,强行更改函数返回值,输出0xdeadbeef。

2301_79586491的博客 1544

Create React App文件上传:多媒体处理和管理方案终极指南

在当今的Web应用开发中,文件上传功能已成为不可或缺的核心需求。无论是用户头像、产品图片、文档分享还是多媒体内容,Create React App为开发者提供了强大的文件上传解决方案。本指南将详细介绍如何在React应用中实现高效的文件上传功能,涵盖从基础配置到高级多媒体处理的完整方案。 ## 🚀 为什么文件上传如此重要? 文件上传是现代Web应用的基础功能之一。通过Create React

gitblog_01413的博客 459

TI电机驱动应用中MOSFET选型完整指南

深入解析TI电机驱动设计中MOSFET的选型关键,涵盖参数匹配、热性能与开关效率,帮助工程师优化系统性能并提升能效,是掌握MOSFET应用的核心参考。

weixin_42263617的博客 1270

IATF16949核心职位全解析

TM / Top MgmtMR / QMRProcess OwnerQMQAQCSQECQEPQEPETEMEIEPM / PJMFMEA ModeratorMSA CoordinatorSPC CoordinatorCM / CCB内审员CP / CPK

weixin_49938552的博客 973

jQuery文件上传下载实战:6种方案与安全优化

文件传输是Web开发中的基础功能,涉及浏览器文件API、网络协议和安全机制等多层技术栈。从技术原理看,现代浏览器通过FileReader、FormData等原生API提供了文件处理能力,而jQuery主要承担简化DOM操作和事件处理的角色。在工程实践中,开发者需要根据场景选择合适的技术方案:传统表单上传适合简单场景,分片上传解决大文件传输问题,Base64编码适用于小文件即时处理,而第三方存储直传能减轻服务器压力。安全防护方面需注意文件类型验证、权限控制和病毒扫描等要点。这些技术在电商图片上传、OA文档管理

weixin_34268753的博客 430

YOLOv11 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

本文介绍了分离与增强注意力模块(SEAM)在YOLOv11中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

魔改工程师的博客 1666

快速验证:用SeaweedFS+React构建文件分享平台原型

基础设施尽量用开箱即用的方案非核心功能先用简单实现部署平台要选零配置的这套方案虽然简单,但已经包含了完整的产品逻辑。增加OSS备份功能实现团队协作空间接入第三方存储用InsCode(快马)平台的最大感受就是"快",从写代码到上线演示的闭环特别短,特别适合做技术验证。他们的AI辅助功能还能自动补全样板代码,又省下不少重复劳动时间。

EmeraldEagle36的博客 1070

华为OD机试真题 新系统 2026-04-19 C语言 实现【8位LED控制器】

有一个8位LED控制器,包含8个LED灯(编号0-7),初始状态全灭,用8位二进制表示为:00000000。控制器可以接收以下三种指令: Lx:L表示点亮操作,x表示LED的编号(0一7),操作得到的结果是:点亮第x个LED灯,把状态设为1。 Dx:D表示熄灭操作,x表示LED的编号(0-7),操作得到的结果是:熄灭第x个LED灯,把状态设为0。 Tx:T表示切换操作,x表示LED的编号(0-7),操作得到的结果是:切换第x个LED灯的状态,若状态为0则变为1,为1则变为0。 现在给定一组指令字符串(0<

MISAYAONE的博客 149

SLAM Cartographer(18)后端优化问题求解器

了解经过闭环检测构建了子图与节点之间的约束之后,通过后端优化求解器进行优化求解。核心是基于Ceres库进行SPA(Sparse Pose Adjustment)的优化方法,把后端优化问题描述成为一个最小二乘的问题求解

氢键H-H 5680

【SpringBoot篇】SpringBoot WebFlux响应式大文件流式上传下载实战(Flux<DataBuffer>低内存原理、源码解析、落地方案)

DataBuffer:WebFlux底层数据缓冲区,封装Netty ByteBuf,是响应式数据传输的最小单元,默认分片大小可配置:0-N个DataBuffer的流式序列,对应大文件的分片数据流,是大文件上传下载的核心载体背压(Backpressure):响应式核心机制,下游处理速率不足时,向上游传递限流信号,控制数据生产速率极致低内存占用:内存占用恒定,与文件大小无关,支持TB级大文件传输,彻底杜绝OOM高并发高吞吐:Netty事件驱动+非阻塞IO,单服务可支撑千级并发大文件传输,远超MVC同步架构。

荏苒夕阳的博客 460

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Axios工程化实践:从基础请求到生产级HTTP客户端配置

HTTP客户端是前端与后端数据交互的核心技术,通过封装网络请求实现前后端分离架构。其工作原理基于浏览器XMLHttpRequest或Fetch API,提供统一的请求响应处理机制。在工程实践中,合理的HTTP客户端配置能显著提升应用稳定性,如设置分场景超时时间避免资源浪费,通过拦截器统一处理认证逻辑。针对高频搜索的跨域问题和文件上传需求,需要结合代理配置和Content-Type设置。本文以Axios为例,深入探讨如何通过实例化配置、错误分层处理和类型安全等工程化手段,将基础HTTP库升级为生产可用的数据层

weixin_33968104的博客 327

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

二次开发CosyVoice3 WebUI:基于Vue或React重构前端界面

阿里开源的CosyVoice3支持3秒声音克隆与自然语言控制,但其Gradio默认界面难以定制。通过Vue或React重构前端,可实现响应式布局、历史记录、模板输入等产品级功能,提升用户体验与系统集成能力。前后端分离架构下,借助标准HTTP接口通信,轻松对接语音生成功能,推动AI技术从原型走向落地。

weixin_32306683的博客 798

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

axios 功能全景:Isomorphic HTTP 客户端的核心特性与源码实现解析

本文基于 axios 官方文档([docs/pages/getting-started/features.md](https://link.gitcode.com/i/16abed3c702adccbc8b87c617ef3a73d))整理并深度扩充,系统讲解 axios 作为 Promise 化 HTTP 客户端的全部核心能力:跨浏览器与 Node.js 的 Isomorphic 架构、可选的

gitblog_00251的博客 315
上一篇: 【作为软件工程师,引发的思考】
Lydia500
博客等级 码龄7年 746粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值