Vue.js组件开发-实现下载时暂停恢复下载

在 Vue 中实现下载时暂停和恢复功能,通常可以借助 XMLHttpRequest 对象来控制下载过程。XMLHttpRequest 允许在下载过程中暂停和继续请求。

实现步骤

  1. 创建 Vue 组件:创建一个 Vue 组件,包含下载、暂停和恢复按钮。
  2. 初始化 XMLHttpRequest 对象:在组件中初始化一个 XMLHttpRequest 对象,用于处理下载请求。
  3. 实现下载功能:通过 XMLHttpRequest 发起下载请求,并监听下载进度。
  4. 实现暂停功能:暂停 XMLHttpRequest 请求。
  5. 实现恢复功能:恢复 XMLHttpRequest 请求。

详细代码

<template><div><!-- 下载按钮,点击触发 downloadFile 方法 --><button @click="downloadFile">下载</button><!-- 暂停按钮,点击触发 pauseDownload 方法 --><button @click="pauseDownload" :disabled="!isDownloading || isPaused">暂停</button><!-- 恢复按钮,点击触发 resumeDownload 方法 --><button @click="resumeDownload" :disabled="!isPaused">恢复</button><!-- 显示下载进度 --><p>下载进度: {{ progress }}%</p></div>
</template><script>
export default {data() {return {xhr: null, // 存储 XMLHttpRequest 对象isDownloading: false, // 标记是否正在下载isPaused: false, // 标记是否暂停下载progress: 0, // 下载进度百分比url: 'https://example.com/file.zip', // 下载文件的 URL,需要替换为实际的文件 URLresumeOffset: 0 // 恢复下载时的偏移量};},methods: {downloadFile() {// 创建一个新的 XMLHttpRequest 对象this.xhr = new XMLHttpRequest();// 打开一个 GET 请求,设置响应类型为 blobthis.xhr.open('GET', this.url, true);this.xhr.responseType = 'blob';// 如果有恢复偏移量,设置请求头的 Rangeif (this.resumeOffset > 0) {this.xhr.setRequestHeader('Range', `bytes=${this.resumeOffset}-`);}// 监听下载进度事件this.xhr.addEventListener('progress', (event) => {if (event.lengthComputable) {// 计算下载进度百分比this.progress = Math.round((this.resumeOffset + event.loaded) / (this.resumeOffset + event.total) * 100);}});// 监听请求完成事件this.xhr.addEventListener('load', () => {this.isDownloading = false;this.isPaused = false;this.resumeOffset = 0;// 创建一个临时的 URL 对象const url = window.URL.createObjectURL(this.xhr.response);// 创建一个 <a> 元素const a = document.createElement('a');a.href = url;a.download = 'file.zip'; // 设置下载文件名// 模拟点击 <a> 元素进行下载a.click();// 释放临时 URL 对象window.URL.revokeObjectURL(url);});// 监听请求错误事件this.xhr.addEventListener('error', () => {this.isDownloading = false;this.isPaused = false;console.error('下载出错');});// 开始发送请求this.xhr.send();this.isDownloading = true;this.isPaused = false;},pauseDownload() {if (this.isDownloading &&!this.isPaused) {// 暂停下载,终止 XMLHttpRequest 请求this.xhr.abort();this.isPaused = true;// 记录当前下载的偏移量this.resumeOffset += this.xhr.response.byteLength || 0;}},resumeDownload() {if (this.isPaused) {// 恢复下载,调用 downloadFile 方法this.downloadFile();}}}
};
</script>

代码注释

代码中的注释已经详细解释了每一步的作用,以下是一些关键部分的总结:

  • downloadFile 方法:创建 XMLHttpRequest 对象,发起下载请求,监听下载进度和完成事件,处理下载完成后的文件保存。
  • pauseDownload 方法:暂停下载,终止 XMLHttpRequest 请求,并记录当前下载的偏移量。
  • resumeDownload 方法:恢复下载,调用 downloadFile 方法,并设置请求头的 Range 以从指定位置继续下载。

使用说明

  1. 替换文件 URL:将 data 中的 url 属性替换为实际要下载的文件的 URL。
  2. 引入组件:将上述代码保存为一个 Vue 组件(例如 DownloadComponent.vue),然后在需要使用的地方引入该组件。
<template><div><DownloadComponent /></div>
</template><script>
import DownloadComponent from './DownloadComponent.vue';export default {components: {DownloadComponent}
};
</script>
  1. 运行项目:在浏览器中运行 Vue 项目,点击“下载”按钮开始下载文件,点击“暂停”按钮暂停下载,点击“恢复”按钮继续下载。

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

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

相关文章

世上本没有路,只有“场”et“Bravo”

楔子&#xff1a;电气本科“工程电磁场”电气研究生课程“高等电磁场分析”和“电磁兼容”自学”天线“、“通信原理”、“射频电路”、“微波理论”等课程 文章目录 前言零、学习历程一、Maxwells equations1.James Clerk Maxwell2.自由空间中传播的电磁波3.边界条件和有限时域…

electron typescript运行并设置eslint检测

目录 一、初始化package.json 二、安装依赖 三、项目结构 四、配置启动项 五、补充&#xff1a;ts转js别名问题 一、初始化package.json 我的&#xff1a;这里的"main"没太大影响&#xff0c;看后面的步骤。 {"name": "xloda-cloud-ui-pc"…

学习数据结构(3)顺序表

1.动态顺序表的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;扩容 &#xff08;3&#xff09;头部插入 &#xff08;4&#xff09;尾部插入 &#xff08;5&#xff09;头部删除 &#xff08;这里注意要保证有效数据个数不为0&#xff09; &#xff08;6&a…

PydanticAI应用实战

PydanticAI 是一个 Python Agent 框架,旨在简化使用生成式 AI 构建生产级应用程序的过程。 它由 Pydantic 团队构建,该团队也开发了 Pydantic —— 一个在许多 Python LLM 生态系统中广泛使用的验证库。PydanticAI 的目标是为生成式 AI 应用开发带来类似 FastAPI 的体验,它基…

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错&#xff0c;特别是深度思考模式&#xff0c;每次都能自我反省改进。比如我让 它写文案&#xff1a; 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们&#xff1a; 当CtrlS的肌肉记忆遇上抢票插件&#xff0c;当Spring Boot的…

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…

若依基本使用及改造记录

若依框架想必大家都了解得不少&#xff0c;不可否认这是一款及其简便易用的框架。 在某种情况下&#xff08;比如私活&#xff09;使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况&#xff0c;记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…

Kafka 深入服务端 — 时间轮

Kafka中存在大量的延迟操作&#xff0c;比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器&#xff0c;来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能&#xff0c;因为它们的插入和…

数据分析系列--②RapidMiner导入数据和存储过程

一、下载数据 点击下载AssociationAnalysisData.xlsx数据集 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从本地选择.csv或.xlsx 三、界面说明 四、存储过程 将刚刚新建的过程存储到本地 Congratulations, you are done.

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架&#xff0c;通过多层次的开放能力提供统一接入标准&#xff0c;实现三方框架快速…

ES6语法

一、Let、const、var变量定义 1.let 声明的变量有严格局部作用域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么&#xff1f;Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…

前端——js高级25.1.27

复习&#xff1a;对象 问题一&#xff1a; 多个数据的封装提 一个对象对应现实中的一个事物 问题二&#xff1a; 统一管理多个数据 问题三&#xff1a; 属性&#xff1a;组成&#xff1a;属性名属性值 &#xff08;属性名为字符串&#xff0c;属性值任意&#xff09; 方…

[创业之路-270]:《向流程设计要效率》-2-企业流程架构模式 POS架构(规划、业务运营、支撑)、OES架构(业务运营、使能、支撑)

目录 一、POS架构 二、OES架构 三、POS架构与OES架构的差异 四、各自的典型示例 POS架构典型示例 OES架构典型示例 示例分析 五、各自的典型企业 POS架构典型企业 OES架构典型企业 分析 六、各自典型的流程 POS架构的典型流程 OES架构的典型流程 企业流程架构模式…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

【现代深度学习技术】深度学习计算 | 参数管理

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

C语言,无法正常释放char*的空间

问题描述 #include <stdio.h> #include <stdio.h>const int STRSIZR 10;int main() {char *str (char *)malloc(STRSIZR*sizeof(char));str "string";printf("%s\n", str);free(str); } 乍一看&#xff0c;这块代码没有什么问题。直接书写…

【开源免费】基于Vue和SpringBoot的在线文档管理系统(附论文)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

忘记宝塔的访问地址怎么找

在linux中安装宝塔面板后会生成网址、账号和密码 如果网址忘记了那将进不去宝塔面板该怎么办呢&#xff1f; bt命令 我们输入 bt 命令的时候&#xff0c;是在根目录里面进行操作的。 / bt 我们根据自己的需要&#xff0c;选择对应的数字就可以了。 bt 14 输入 14 查看面板默…

力扣hot100-->滑动窗口、贪心

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…