当前位置: 首页 > news >正文

【VUE+ElementUI】通过接口下载blob流文件设置全局Loading加载进度

下载Blob流文件,并以服务形式显示文件下载进度

1、下载接口 增加 config参数,并用...config将该属性加入到请求中;

xxapi.js文件中设置downloadFile下载接口

// 下载文件
export function downloadFile(data, config) {return request({url: '/xx/downloadFile',method: 'post',data: data,responseType: 'blob',timeout: 120 * 60 * 1000,...config})
}

2、在页面中添加以下代码

<el-button type="text" icon="el-icon-download" @click="handleDownload(scope.row)">下载</el-button>
<script>
import { downloadFile } from "@/api/xxapi";
import { Loading } from 'element-ui'
let downloadLoadingInstance;export default {name: "DownloadFile",data() {return {downloadProgress: 0}},methods: {handleDownload(row) {var that = this;downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候 " + that.downloadProgress + '%', spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })const config = {onDownloadProgress: progressEvent => {if (progressEvent.lengthComputable) {that.downloadProgress = Math.round((progressEvent.loaded / progressEvent.total) * 100);downloadLoadingInstance.text = "正在下载数据,请稍候 " + that.downloadProgress + '%';}}};// 从后端请求到 二进制数据,并由后端转成blobdownloadFile({ url: row.url }, config).then((response) => {let downloadName = `${row.fileName}`;this.downloadBlob(response, downloadName); // 二进制流直接取responsedownloadLoadingInstance.close(); // 关闭加载loading效果});},// 下载文件流格式的文件downloadBlob(response, downloadName) {let blob = new Blob([response], {type: "application/json;charset=utf-8",});let href = window.URL.createObjectURL(blob); // 创建下载的链接if (window.navigator.msSaveBlob) {try {window.navigator.msSaveBlob(blob, downloadName);} catch (e) {console.log(e);}} else {// 谷歌浏览器 创建a标签 添加download属性下载let downloadElement = document.createElement("a");downloadElement.href = href;downloadElement.target = "_blank";downloadElement.download = downloadName; // 下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); // 点击下载document.body.removeChild(downloadElement); // 下载完成移除元素window.URL.revokeObjectURL(href); // 释放掉blob对象}}}
}
</script>
http://www.lryc.cn/news/517506.html

相关文章:

  • 算法的五个重要特性和4个基本标准
  • svelte5中使用react组件
  • iOS - 自定义引用计数(MRC)
  • 北航现实场景无人机VLN新基准! OpenUAV:面向真实环境的无人机视觉语言导航,平台、基准与方法
  • OpenCV计算机视觉 08 图像的旋转
  • C++感受15-Hello STL 泛型启蒙
  • 【Java 学习】对象赋值的艺术:Java中clone方法的浅拷贝与深拷贝解析,教你如何在Java中实现完美复制
  • 基于高斯混合模型的数据分析及其延伸应用(具体代码分析)
  • 无人机+Ai应用场景!
  • 操作手册:集成钉钉审批实例消息监听配置
  • AI大模型-提示工程学习笔记4
  • Vue3.5 企业级管理系统实战(一):项目初始搭建与配置
  • 缓存-Redis-缓存更新策略-主动更新策略-Cache Aside Pattern(全面 易理解)
  • 杭州市有哪些大学能够出具论文检索报告?
  • SpringBootWeb 登录认证(day12)
  • 使用AOP在切面逻辑中无法获取到requesetBody
  • 生成模型:变分自编码器-VAE
  • Hive sql执行文件合并配置参数
  • 鸿蒙 ArkUI实现地图找房效果
  • 一套极简易的直流无刷电机(Deng FOC)开发套件介绍
  • Inception模型详解及代码分析
  • Springboot AOP 每个接口运行前 修改入参
  • 课题推荐——基于GPS的无人机自主着陆系统设计
  • 【深度学习】在深度学习训练过程中,数据量太少会导致模型过拟合还是欠拟合?
  • js迭代器模式
  • 测试开发基础知识2
  • PromQL基础使用和案例解析
  • 使用Python实现基于机器学习的垃圾邮件过滤
  • MySql根据经纬度查询距离
  • Aviatrix Controller 未授权命令注入漏洞复现(CVE-2024-50603)