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

前端下载文件、压缩包

一、下载文件

后端直接返回文件下载链接

/*** 解析文件名称* @param {string} filePath 文件地址*/
export function parseFileName(filePath) {let tempPath = filePath.split('/')let fileName = tempPath[tempPath.length - 1]if (!fileName) return ''return decodeURIComponent(fileName.split('?')[0].split('#')[0])
},/*** 下载文件通用* @param {string} filePath 文件地址* @param {string} [downloadName] 文件名称*/
export function downloadFileGeneral(filePath, downloadName) {// 创建一个虚拟的链接元素const link = document.createElement('a');link.href = filePath; // 文件路径// 如果没有下载文件名称if (!downloadName) {downloadName = parseFileName(filePath)}link.download = downloadName; // 下载时文件的名称// 链接隐藏link.style.display = 'none';// 将链接添加到文档中document.body.appendChild(link);// 触发点击事件link.click();// 移除链接元素document.body.removeChild(link);
}

二、下载压缩包

调用下载压缩包接口,后端返回文件流

/*** 下载压缩包通用(文件流)* @param {string} fileBlob 文件流* @param {string} compressedFile 压缩包名字*/
export function downloadZip(fileBlob, compressedFile) {// 创建Blob对象const blob = new Blob([fileBlob], { type: "application/zip" });// 创建下载链接const downloadUrl = window.URL.createObjectURL(blob);const link = document.createElement("a");link.href = downloadUrl;link.download = compressedFile;document.body.appendChild(link);// 触发点击下载link.click();// 清理window.URL.revokeObjectURL(downloadUrl);document.body.removeChild(link);
}

调用下载方法

    handleDownAll() {packageDownload({sourceDocId: this.id,sourceDocType: 1,}).then(async (res) => {await downloadZip(res, "文件压缩包");this.$message.success("下载成功");});},

注意:在请求压缩包接口的时候需要指定 responseType: blob,否则下载下来的压缩包可能无法解压

// 下载文件压缩包
export function packageDownload(data) {return request({url: '/common/service/packageDownload',method: 'post',responseType: 'blob', // 重要!指定响应类型为blobdata: data})
}

这世界很喧嚣,做你自己就好

http://www.dtcms.com/a/339427.html

相关文章:

  • 【深度解析----Pycharm命令行和项目中Settings-Interpreter中安装的插件库不一致的原因以及解决办法】
  • 权重、偏置、运行均值、运行方差的概念
  • 【基础-判断】所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数
  • 图形化监控用数据动态刷新方法
  • 快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
  • Linux 定时任务 + Oracle 19c 备份完整操作手册(Linux→windows server)
  • 【git】改 GitLab 远程分支名;
  • Unity高级开发:反射原理深入解析与实践指南 C#
  • Java 线程状态与线程组
  • 水闸安全综合监测系统解决方案
  • Kafka 面试题及详细答案100道(1-10)-- 基础概念与架构
  • NestJS @Inject 装饰器入门教程
  • Hugging Face 核心组件介绍
  • 大功率变速箱总成双联试验台架系统参数
  • 机器人控制基础:运动控制中的串级pid原理以及实现方案(包含代码示例)
  • C/C++ 常见笔试题与陷阱详解
  • .net core web程序如何设置redis预热?
  • 【大白话解析】 OpenZeppelin 的 Address 库:Solidity安全地址交互工具箱​(附源代码)
  • Mybatis执行SQL流程(四)之MyBatis中JDK动态代理
  • Ansible 异步任务管理与内容重用详解
  • 10.Ansible角色管理
  • Ubuntu 和麒麟系统创建新用户 webapp、配置密码、赋予 sudo 权限并禁用 root 的 SSH 登录的详细
  • 网络间的通用语言TCP/IP-网络中的通用规则3
  • 缓存雪崩、缓存穿透、缓存击穿在实际中如何处理
  • Windows Git安装配置
  • PCL+Spigot服务器+python进行MC编程(使用Trae进行AI编程)---可以生成彩虹
  • 代码随想录Day56:图论(冗余连接、冗余连接II)
  • 【python】列表复制注意事项
  • 大模型+RPA:如何用AI实现企业流程自动化的“降本增效”?
  • 什么类型的项目会优先选择Headless CMS