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

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录

    • 1、location.href
    • 2、location.href
    • 3、a标签
    • 4、请求后端的方式
    • 5、文件下载的方式
    • 6、Blob和Base64
    • 7、下载附件方法(excel,zip,html,markdown)
    • 8、封装下载函数
    • 9、导出 zip 压缩包相关方法(流方式)
  • 总结


在这里插入图片描述

1、location.href

//get请求
window.location.href = url;

2、location.href

//get请求和location.href类似
window.open(url);

3、a标签

//写法1
const download = (filename, url) => {let a = document.createElement('a'); a.style = 'display: none'; // 创建一个隐藏的a标签a.download = filename;a.href = url;document.body.appendChild(a);a.click(); // 触发a标签的click事件document.body.removeChild(a);
}

4、请求后端的方式

axios({method: 'post',headers: {'Content-Type': 'application/json; charset=utf-8'},url: '/robot/strategyManagement/analysisExcel',responseType: 'blob',headers: { //如果需要权限下载的话,加在这里Authorization: '123456'}data: JSON.stringify(params),
}).then(function(res){var content = res.headers['content-disposition'];var name = content && content.split(';')[1].split('filename=')[1];var fileName = decodeURIComponent(name)downloadFile(res.data,fileName)
})

5、文件下载的方式

downloadFile:function(data,fileName){// data为blob格式var blob = new Blob([data]);var downloadElement = document.createElement('a');var href = window.URL.createObjectURL(blob);downloadElement.href = href;downloadElement.download = fileName;document.body.appendChild(downloadElement);downloadElement.click();document.body.removeChild(downloadElement);window.URL.revokeObjectURL(href);
}

6、Blob和Base64

function downloadFile(res, Filename) {// res为接口返回数据,在请求接口的时候可进行鉴权if (!res) return;// IE及IE内核浏览器if ("msSaveOrOpenBlob" in navigator) {navigator.msSaveOrOpenBlob(res, name);return;}const url = URL.createObjectURL(new Blob([res]));//  const fileReader = new FileReader();  使用 Base64 编码生成// fileReader.readAsDataURL(res);// fileReader.onload = function() { ...此处逻辑和下面创建a标签并释放代码一致,可从fileReader.result获取href值... }const a = document.createElement("a");a.style.display = "none";a.href = url;a.download = Filename;document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(url); // 释放blob对象
}

7、下载附件方法(excel,zip,html,markdown)

/*** @param data 数据* @param fileName 文件名称* @param type 导出文件类型*/
export const download = (data: Blob, fileName: string, type: string) => {// 创建 blobconst blob = new Blob([data], { type: mineType[type] })// 创建 href 超链接,点击进行下载window.URL = window.URL || window.webkitURLconst href = URL.createObjectURL(blob)const downA = document.createElement('a')downA.href = hrefdownA.download = fileNamedownA.click()// 销毁超连接window.URL.revokeObjectURL(href)
}export const mineType = {excel: 'application/vnd.ms-excel', // 下载 Excelword: 'application/msword', // 下载 Wordzip: 'application/zip', // 下载 Ziphtml: 'text/html', // 下载 Htmlmarkdown: 'text/markdown', // 下载 Markdown
}

使用

download(res, '导出模板.docx', 'word')

8、封装下载函数

export const download = (res, type, filename) => {// 创建blob对象,解析流数据const blob = new Blob([res], {// 设置返回的文件类型// type: 'application/pdf;charset=UTF-8' 表示下载文档为pdf,如果是word则设置为msword,excel为exceltype: type})// 这里就是创建一个a标签,等下用来模拟点击事件const a = document.createElement('a')// 兼容webkix浏览器,处理webkit浏览器中href自动添加blob前缀,默认在浏览器打开而不是下载const URL = window.URL || window.webkitURL// 根据解析后的blob对象创建URL 对象const herf = URL.createObjectURL(blob)// 下载链接a.href = herf// 下载文件名,如果后端没有返回,可以自己写a.download = '文件.pdf'a.download = filenamedocument.body.appendChild(a)// 点击a标签,进行下载 a.click()// 收尾工作,在内存中移除URL 对象document.body.removeChild(a)window.URL.revokeObjectURL(herf)
}

9、导出 zip 压缩包相关方法(流方式)

后端的设置 Content-Type: application/octet-stream(下载用的流)

 // 下载zip方法//zip格式文件下载zipdwonUpload(data) {console.log("干部任免表传递的数据", data);let ids = data.ids;console.log("ids集合数据", ids);// 导出干部任免表接口this.$axios.post(`personnel/exportAppointmentAndDismissal`, ids, {responseType: "blob",}).then((res) => {// reslet blob = res;let that = this;//通过FileReader读取数据,是一种异步文件读取机制let reader = new FileReader();//以下这两种方式我都可以解析出来,因为Blob对象的数据可以按文本或二进制的格式进行读取// reader.readAsBinaryString(blob, 'utf8');reader.readAsText(blob, "utf8");// eadAsText(file, encoding);以纯文本的方式读取,读取到的文本保存在result属性中。第二个参数代表编码格式reader.onload = function (result) {//onload在成功加载后就会触发console.log("result信息", result);console.log("isJson判断是否为json格式",that.isJSON(result.target.result));if (that.isJSON(result.target.result)) {that.$message.warning(JSON.parse(result.target.result).msg);// loading效果// that.loadingBut = false;} else {console.log("下载zip数据", res);// that.downloadFile(res);}};}).catch((error) => {console.log(error);// 打印错误}).finally(() => {// 导出按钮loading效果this.isDownloadingFile = false;});},

使用导出 zip

    // 导出zipdownloadFile(res) {// res 下载转blob二进制或文本数据let blob = new Blob([res], { type: "application/zip" });console.log("导出的blob", blob);if (window.navigator.msSaveOrOpenBlob) {// msSaveOrOpenBlob 提供保存和打开按钮navigator.msSaveOrOpenBlob(blob, "xxx.zip");// navigator.msSaveOrOpenBlob(blob, "xxx.zip");return;}let url = window.URL.createObjectURL(blob);const link = document.createElement("a"); // 创建a标签link.href = url;link.download = `干部任免压缩包`; // 重命名文件link.click();URL.revokeObjectURL(url); // 释放内存// this.loadingBut = false; //loading效果},

总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

相关文章:

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…...

铠甲网络面试(部分)

如何用Redis实现分布式锁的?如果设置的超时时间到了,但占有锁的任务还未完成,怎么办?答案:定时任务进行检测与续约,具体参考 本博----《专题三分布式系统》之《第三章 集中式缓存Redis》之 《第三节 Redis底…...

elasticsearch 将时间类型为时间戳保存格式的时间字段格式化返回

dsl查询用法如下: GET /your_index/_search {"_source": {"includes": ["timestamp", // Include the timestamp field in the search results// Other fields you want to include],"excludes": []},"query": …...

淘宝商品列表怎么通过接口形式导出?

淘宝是目前国内最大的电商平台之一,拥有海量的商品资源。但是,有时候我们需要对淘宝商品进行批量操作,比如进行价格比较、数据分析等等。这时候,我们就需要将淘宝商品列表导出。那么,淘宝商品列表怎么导出呢?又可以按…...

TWS真无线蓝牙耳机哪家好?六款口碑好的TWS真无线蓝牙耳机分享

为了帮助大家在这个充满选择的世界中找到最理想的蓝牙耳机,我们特别为您精心挑选了几款备受赞誉的产品,它们在音质、舒适度、功能和性价比等方面都有出色的表现。在本文中,我们将深入探讨这些蓝牙耳机的特点和优势,帮助您更好地了…...

解决Win11右键菜单问题

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: 程序日常 ✨特色专栏&…...

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好,我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论,总结出安装部署Datahub最新版本的部署手…...

归并排序——“数据结构与算法”

各位CSDN的uu们好呀,今天,小雅兰的内容仍然是数据结构与算法专栏的排序呀,下面,让我们进入归并排序的世界吧!!! 归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种…...

C语言笔试题训练【第一天】

目录 第一题 第二题 第三题 第四题 第五题 大家好,我是纪宁。 从今天开始博主会日更一些经典的C语言笔试题,持续20天左右。题目类型为5道选择题加2道编程题,希望能和大家一起进步。 第一题 1.读程序,下面程序正确的输出是&…...

计算语言模型计算每秒钟生成的token数量it/s

在 main() 函数的stream循环中,我们可以计算每秒钟生成的token数量,然后输出 it/s。在流式生成过程中,我们可以使用Python的time模块来计算速度。在测试时,生成速度会受到多个因素的影响,包括设备性能、模型大小、输入…...

Clickhouse调研

1、独立组件个数(按进程) 默认情况下是1个;如果需要使用副本机制,需要依赖zookeeper;如果需要监控功能,还得依赖第三方监控系统。 2、单机部署 很好的支持单机运行,并且单机情况下查询入库性能不错(通过其提供的示例数据进行体验)。 3、窗口函数 Clickhouse没有显示…...

02.Redis实现添加缓存功能

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能 学习产出&#xff1a; 流程图 1. 准备pom环境 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId&g…...

【1.2】Java微服务:SpringCloud概论

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…...

右键文件夹 ------- 打开 vscode的方法

1、右键vscode点击属性 2、这是地址栏&#xff0c;一会复制即可 3、新建一个txt文件,将这个复制进去 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\Microsoft VS Code\\Code.exe"[HKE…...

小程序原生实现左右锚点联动

效果 wxml <view classbox><scroll-view scroll-y scroll-with-animation style"width:25%"><view classnav><view wx:for"{{navList}}" wx:keyindex class"title {{index active ?select:}}"data-index{{index}} bin…...

STM32 低功耗-睡眠模式

STM32 睡眠模式 文章目录 STM32 睡眠模式第1章 低功耗模式简介第2章 睡眠模式简介2.1 进入睡眠模式2.1 退出睡眠模式 第3章 睡眠模式代码示例总结 第1章 低功耗模式简介 在 STM32 的正常工作中&#xff0c;具有四种工作模式&#xff1a;运行、睡眠、停止和待机模式。 在系统或…...

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…...

基于方向编码的模板匹配算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ........................................................................... %选择移动个…...

shell centos 7 一键部署 KVM软件脚本

这个脚本有限地方还需要完善下 设计思路&#xff1a; 1、创建检查内核函数 check_kernel() 2、创建升级内核函数 update_kernel() 3、创建检查是否支持虚拟化函数 check_virtual() 4、创建检查操作系统函数 check_system() 5、创建检查网络函数 check_network() 6…...

64 # 实现一个 http-server

准备工作 上一节实现了通过 commander 的配置获取到用户的参数&#xff0c;下面完成借用 promise 写成类的方法一节没有完成的任务&#xff0c;实现一个 http-server&#xff0c;https://www.npmjs.com/package/http-server&#xff0c;http-server 是一个简单的零配置命令行静…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...