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

前端下载文件、压缩包

一、下载文件

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

/*** 解析文件名称* @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.xdnf.cn/news/18118.html

相关文章:

  • Java网络编程:TCP与UDP通信实现及网络编程基础
  • 集成电路学习:什么是Object Tracking目标跟踪
  • 大模型参数如何影响模型的学习和优化?
  • 从H.264到AV1:音视频技术演进与模块化SDK架构全解析
  • 开源游戏引擎Bevy 和 Godot
  • ProfiNet从站转Modbus TCP网关技术详解
  • 【深度解析】2025年中国GEO优化公司:如何驱动“答案营销”
  • 【实时Linux实战系列】实时大数据处理与分析
  • 关闭VSCode Markdown插件在Jupyter Notebook中的自动预览
  • 第四章:大模型(LLM)】07.Prompt工程-(2)Zero-shot Prompt
  • Node.js完整安装配置指南(包含国内镜像配置)
  • 【2025CVPR-目标检测方向】学习稳健且硬件自适应的对象检测器,以应对边缘设备的延迟攻击
  • 黑马java入门实战笔记
  • 链路聚合路由器OpenMPTCProuter源码编译与运行
  • 【Day 30】Linux-Mysql数据库
  • vue的双向数据绑定
  • 【DL学习笔记】损失函数各个类别梳理
  • Go并发编程-goroutine
  • Docker小游戏 | 使用Docker部署文字风格冒险网页小游戏
  • 【计算机视觉与深度学习实战】05计算机视觉与深度学习在蚊子检测中的应用综述与假设
  • wait / notify、单例模式
  • TDengine `count_window` 指定列计数功能用户手册
  • 密码管理中随机数安全修复方案
  • 【金融数据分析】用Python对金融产品价格进行时间序列分解
  • JVM 面试精选 20 题
  • MyCAT完整实验报告
  • 音频分类模型笔记
  • 集成电路学习:什么是Face Detection人脸检测
  • CentOS 7.9 部署 filebrowser 文件管理系统
  • 动态规划:入门思考篇