前端接收后端传递的表格文件流,通过a标签下载excel文件

news2024/10/21 17:39:01

前言:从后端获取表格等文件流并在前端触发下载的功能是个常用功能,方法很多,这里我们采用Blob 对象和 <a> 标签来实现文件下载。

我这里实现的是列表数据可选并导出,选择需要导出的字段,发送给后端,请求成功后后端返回文件流,前端通过a链接下载,导出成功,文件可查看。

1.重要部分代码如下

// 触发请求,可以是按钮,也可以在当前界面直接调用接口
exprotData(){
// 数据
  let data = {

  };
// 接口
  apijs.exportData(data).then(res => {
    console.log("execl",res.data);
    this.handleDownloadFile(res.data,'名称.xlsx')
  })
},


// 处理文件并下载
handleDownloadFile(){
  const blob = new Blob([file],{
    type: "application/vnd.ms-excel;charset=UTF-8"
  });
  const a = document.createElement("a");
  const objectUrl =  window.URL.createObjectURL(blob);
  a.setAttribute("href",objectUrl);
  a.setAttribute("download",fileName);
  a.click();
  URL.revokeObjectURL(a.href);
},

接口指定响应的类型为 arraybufferarraybuffer 是一种用于表示通用的、固定长度的原始二进制数据缓冲区的方式。

期望以 arraybuffer 形式接收响应数据。在处理文件下载(如 Excel 文件、PDF 文件等)时非常有用,因为文件内容通常以二进制形式传输。

//接口  
getData(data){
    return axiosApi(
      {
        method: "POST",
        url: `接口地址`,
        data,
        responseType: "arraybuffer"
      }
    )
  }

2.文件处理代码解析

// 处理文件并下载
handleDownloadFile(){
  const blob = new Blob([file],{
    type: "application/vnd.ms-excel;charset=UTF-8"
  });
  const a = document.createElement("a");
  const objectUrl =  window.URL.createObjectURL(blob);
  a.setAttribute("href",objectUrl);
  a.setAttribute("download",fileName);
  a.click();
  URL.revokeObjectURL(a.href);
},

handleDownloadFile 函数来处理下载文件,它接受两个参数 file 和 fileName,分别表示要下载的文件内容和文件名。

首先,代码创建了一个 Blob 对象,Blob 是一种表示二进制数据的对象。Blob([file], { type: "application/vnd.ms-excel;charset=UTF-8" }) 创建了一个包含 file 内容的 Blob 对象,并指定了 MIME 类型为 "application/vnd.ms-excel;charset=UTF-8"。

创建了一个 <a> 标签,使用 window.URL.createObjectURL(blob) 生成了一个 URL,该 URL 指向了上面创建的 Blob 对象。

设置了 <a> 标签的 href 属性为上述生成的 URL,以及 download 属性为传入的 fileName,这样就指定了文件下载的链接和文件名。

调用了 <a> 标签的 click 方法,实现了模拟用户点击下载链接的操作。

调用 URL.revokeObjectURL(a.href) 来释放之前创建的 URL 对象,以便释放内存和避免内存泄漏。

3.实现效果

控制台打印出了接收的数据,接收到了文件流。

直接下载完成

打开查看表格文件

若文章对你有帮助,点个赞吧!

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

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

相关文章

12.1-基础柱状图构建

Python基础综合案例——数据可视化 动态柱状图 通过Bar构建基础柱状图 反转x和y轴 调用 bar.reversal_axis() 我们现在所看到的数值是从下到上的&#xff0c;当我们反转之后数据是从左向右的&#xff0c;我们现在把数据放到柱的右边。即数值标签在右侧 添加y轴数据的时候&am…

javaWeb项目-ssm+jsp企业人力资源管理系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a; java-ssmjsp中小企业人力资源管理系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端…

【拼多多】拼多多批发 | 拼多多手机端 | anti_content |

所有的anti_content都可以用官网的anti_content的生成

Pandas | 通过PUBG数据集进行数据分析并理解函数使用

PUBG数据分析 PUBG数据集train 数据分析iloc和loc 过滤参数人数少的比赛duplicated().count() 和 transform(count)countplot绘图函数 补充&#xff1a;查看判断pd的某一列是否没有重复值方法 1: 使用 duplicated() 方法方法 2: 使用 nunique() 方法方法 3: 使用 value_counts(…

一文搞懂进程、线程、协程以及并发、并行、串行的概念

什么是进程&#xff1f; 进程是资源调度的最小单位&#xff0c;操作系统通过进程来管理计算机的资源&#xff0c;如CPU、内存、磁盘等。通俗说法&#xff1a;可看做是正在执行的程序如QQ.exe 什么是线程&#xff1f; 线程是操作系统的最小执行单位&#xff0c;是进程中的一个…

mysql集群-主库从库配置--主从库分离

mysql集群 为什么要做主从库分离&#xff1f; 怎么进行分离&#xff1f; 设置2个数据库&#xff0c;为主库从库&#xff0c;主库存储&#xff0c;从库查询 怎么设置&#xff1f; 在你原本的配置yml文件中主库的ip是多少&#xff0c;从库是多少&#xff0c;都要和数据库的ip 一…

rom定制系列------小米5x_miui12安卓11定制固件界面预览 小米5x第三方固件

&#x1f49d;&#x1f49d;&#x1f49d;此固件来源于客户卡刷固件定制。客户需要修改为线刷。并且修改账号锁功能。 可以让客户使用官方平台批量进行刷写。方便操作。 定制机型以及功能预览&#x1f49d;&#x1f49d;&#x1f49d; 小米5x版本miui12.5.8安卓11固件。此机型…

每日OJ题_牛客_神奇数_数学_C++_Java

目录 牛客_神奇数_数学 题目解析 C代码 Java代码 牛客_神奇数_数学 神奇数_牛客笔试题_牛客网 (nowcoder.com) 描述&#xff1a; 给出一个区间[a, b]&#xff0c;计算区间内“神奇数”的个数。 神奇数的定义&#xff1a;存在不同位置的两个数位&#xff0c;组成一…

MySQL表的基本查询上

1&#xff0c;创建表 前面基础的文章已经讲了很多啦&#xff0c;直接上操作&#xff1a; 非常简单&#xff01;下一个&#xff01; 2&#xff0c;插入数据 1&#xff0c;全列插入 前面也说很多了&#xff0c;直接上操作&#xff1a; 以上插入和全列插入类似&#xff0c;全列…

树莓派使用:YOLOv8环境搭建困难--已解决

1.安装所需包失败 在尝试运行 sudo pip3 install numpy时遇到的错误提示与系统环境管理方式有关&#xff0c;这是因为Python环境是由操作系统管理的&#xff0c;因此不允许直接通过 pip 进行系统范围的包安装。这种限制是为了防止不兼容的包破坏系统的稳定性。 解决方案: 使用…

向量的外积

向量的内积大家都很熟悉了&#xff0c;计算两个向量之间的夹角时就用到了向量的内积。 向量的内积是一个标量&#xff0c; 它的值是一个向量在另一个向量上投影的长度。 1 定义 向量的外积也叫 矢积&#xff0c; 向量积&#xff0c; 叉积。 向量的外积还是一个向量&#xff…

pyserini安装使用

目录 代码 安装 使用 msmarco-passage bm25 代码 git clone https://github.com/castorini/pyserini.git --recurse-submodules pyserini/tools为submodules&#xff0c;地址&#xff1a;anserini-tools 安装 https://github.com/castorini/pyserini/blob/master/docs/…

牛客编程初学者入门训练——BC53 判断是元音还是辅音

BC53 判断是元音还是辅音 描述 KiKi开始学习英文字母&#xff0c;BoBo老师告诉他&#xff0c;有五个字母A(a), E(e), I(i), O(o),U(u)称为元音&#xff0c;其他所有字母称为辅音&#xff0c;请帮他编写程序判断输入的字母是元音&#xff08;Vowel&#xff09;还是辅音&#x…

【JAVA毕业设计】基于Vue和SpringBoot的历史学习网站

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

图示详解OpenEuler下Samba多用户身份验证配置、测试

前言 前文《图例详解OpenEuler下Samba安装、配置和测试》已对Samba服务的工作原理、安装、配置和测试&#xff0c;做了系统的介绍&#xff0c;并对匿名用户的访问samba服务器做了配置&#xff0c;相必读者已对samba服务的流程有了初步、系统的了解&#xff0c;本文在以上基础上…

如何在ActivityCommunication中整合多个Activity(实操)

下面举例添加一个WebViewIntentDemoActivity 第一步&#xff1a;先将java文件导入集合项目中 第二步&#xff1a;创建新的main界面&#xff0c;导入需要增加的Activity界面&#xff08;记得与前面的命名区分开&#xff09; 第三步&#xff1a;在集合Activity界面中添加一个新按…

docker删除容器要怎么操作?如何保障容器安全!

对于新手来说很多用户不清楚docker删除容器要怎么操作&#xff1f;在执行删除操作前&#xff0c;请确保不需要保留容器的任何数据或状态信息&#xff0c;或者已经备份了重要数据。要删除Docker容器和镜像&#xff0c;可以使用以下命令。今天就跟着小编一起来了解下docker删除容…

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法)

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法) requests-pkcs12 PyPI python中如何使用requests模块下载文件并获取进度提示 1、GET方法 1.1、调用 # 下载客户端(GET)def download_client_get(self, header_all):try:url = self.host + "/xxx/v1/xxx-mod…

基于SpringBoot+Vue的扶贫助农有机农产品商城【源码+安装+讲解+售后+开题+答辩PPT】

【1】系统介绍 ① 背景 在快速发展的中国&#xff0c;农村经济虽受益于国家整体繁荣&#xff0c;但仍面临基础设施落后、信息闭塞及销售渠道狭窄等挑战&#xff0c;阻碍了优质农产品的市场拓展&#xff0c;影响农民收入。互联网与电商的兴起&#xff0c;为解决这一难题提供了…

SpringBoot项目如何导入外部jar包:详细指南

在开发SpringBoot项目时&#xff0c;我们经常需要引入一些外部的jar包来增强项目的功能。这些jar包可能不是Maven中央仓库中的&#xff0c;或者我们想要使用特定版本的jar包。本文将详细介绍如何在SpringBoot项目中导入外部jar包&#xff0c;并确保项目能够正确地打包和运行。 …