前端根据后端返回的数据流导出excel
首先在utils.js里面声明exportMethod函数,该函数的作用是通过发axios post请求后端导出接口,请求成功后:
1. 在成功函数里面先新建一个a标签:
const link = document.createElement('a');
2. 然后new一个Blob对象(是一个可以存储二进制文件的容器)
let blob = new Blob([res.data], {type: 'application/x-excel'});
let blob = new Blob(arr[optional], options[optional])
第一个参数为一个数据序列,可以是任意格式的值
第二个参数用于指定将要放入Blob中的数据的类型,比如:type: 'application/x-excel' 或 type: 'text/plain'
3. 通过URL.createObjectURL()方法通过传入的参数(参数:用于创建url的file对象,Blob对象或者MediaSource对象),创建一个指向该参数对象的URL,绑定到创建a标签的href属性上,
link.style.display = 'none';
link.href = URL.createObjectURL(blob);
link.download = data.fileName;
4. 然后往body上面append这个a标签,并执行a标签的点击事件,进行文件的导出,最后导出成功后,要记得把a标签从body上面移除。
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
整个的实现代码如下:
utils.js中添加exportMethod函数:
请求方式为post
exportMethod(data) {
axios({
method: data.method,
url: data.url,
data: data.params,
responseType: 'blob'
}).then((res) => {
const link = document.createElement('a');
let blob = new Blob([res.data], {type: 'application/x-excel'});
link.style.display = 'none';
link.href = URL.createObjectURL(blob);
link.download = data.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}).catch(error => {
this.$Notice.error({
title: '错误',
desc: '网络连接错误'
});
});
}
在调用的组件中引入utils.js文件:
import utils from 'utils/utils.js';
<div class="statement-detail-exportbtn">
<button class="veui-button"
@click="exportExcel">
<span>导出</span>
</button>
</div>
exportExcel() {
let data = {
method: 'post',
url: this.exportUrl,
fileName: this.id+' 结算单详情.xlsx',
params: {
settlementId: this.id
}
};
utils.exportMethod(data);
}
请求方式为get
在utils中新建一个导出excel文件
import axios from 'axios' // 导出Excel公用方法
export function exportMethod(data) {
axios({
method: data.method,
url: `${data.url}${data.params ? '?' + data.params : ''}`,
responseType: 'blob'
}).then((res) => {
const link = document.createElement('a')
let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'})
link.style.display = 'none'
link.href = URL.createObjectURL(blob) // link.download = res.headers['content-disposition'] //下载后文件名
link.download = data.fileName //下载的文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}).catch(error => {
this.$Notice.error({
title: '错误',
desc: '网络连接错误'
})
console.log(error)
})
}
在调用的组件中引入utils.js文件:
exportDepReceRank() {
let myObj = {
method: 'get',
url: "http://zhlw.dev.internal.virtueit.net/v1/video/image/exportImgCheckResult",
fileName: '图片质量检测结果',
params: `orgId=2`
}
exportMethod(myObj)
}
前端根据后端返回的数据流导出excel的更多相关文章
- 【前端】将前台table数据导出excel表格
1.首先引用jquery以及table2excel <script type="text/javascript" src="js/jquery.table2exce ...
- asp.net core webapi 生成导出excel
/// <summary> /// 下载订单 /// </summary> /// <param name="model"></param ...
- Springmvc 使用 AbstractExcelView 导出excel
$("#exportBtn").click(function () { location.href = "${pageContext.request.contextPat ...
- CreateExcel 导出Excel
public class CreateExcel { /// <summary> /// 用Excel组件导出Excel文件 /// </summary> /// <pa ...
- 踹掉后端,前端导出Excel!
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一个下载链接,但有时候我们只想导出前端页面上已经有了的数据,不想再调后端导出接口浪费服务器资源,学习本文demo例子,我们踹掉后端,直接在前 ...
- vue 导出excel后端返回乱码下载不了的解析问题
有俩种方法可以用 第一种方法: 解析:直接解析并且下载后端的乱码 this.download('后端给的导出excel的方法', { ...this.queryParams }, ` ...
- vue 项目中,后端返回文件流,导出excel
之前写过文件流导出excel,这次直接把上次的代码拿过来复制粘贴,但是导出的表格里面没有数据,只显示undefined. 这是之前的代码 // api接口页面 // excel导出接口 export ...
- 前端调用后端接口下载excel文件的几种方式
今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...
- # vue 如何通过前端来导出excel表格
在做一些简单的demo时,偶尔会遇到导出excel表格.如果请后端帮忙的话 比较浪费时间,那么前端如何导出excel表格,下面就来记录一下之前使用到的案例 一.安装依赖 npm i file-save ...
- Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案
因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...
随机推荐
- c++学习6 指针变量
一 指针变量的定义 *是用来修饰指针变量的,通常情况下我们定义的手法都是"类型名"+"*"+"指针变量名称". 有一种简单无脑的" ...
- elementUI el-input 调整数据但是前端界面不刷新
在表格行中提供一个输入框,允许用户输入,并且可以进行简单的四则计算,计算在onblur或者回车触发. <el-input v-model="scope.row[scope.column ...
- mac下eclipse关联svn插件
由于新冠状病毒的疫情这一周都需要在家办公了,家里只有一个mac之前只是娱乐工具,今天不得不用它撸代码,无奈重新安装各种环境,mac和windows的环境安装区别还是很大的,今天差点折磨死我,尤其是在e ...
- C#函数编程学习
知识补缺 //用Func委托写简单函数 Func<int,int> add = i => i + 1; //定义一个只读属性 public class Tea { public Te ...
- DML操作数据
添加数据 insert into 表名(列的名称)(数据);ps:列的名称用` `包围可以减少出错 添加全部数据的时候可以把列的名称省略: 修改数据 update 表名 set 列名=数据,列名= ...
- idea好用的功能
1. 自定义快捷输入 ----https://blog.csdn.net/qq_35091353/article/details/11828025 可以将一些常用的语法,比如各种lamda表达式.tr ...
- 修改mysql root密码,在workbench中导入.sql文件
修改mysql root密码: 1.如果没有配置环境变量,在 \Program Files\MySQL\MySQL Server 8.0\bin 文件下 Shit+右键打开 Powershell 窗口 ...
- if判断while循环
- 【原创】GmSSL Android库编译
相关内容: GmSSL Linux编译 环境搭建 重要 用编译方法2编译出的库,集成到工程之后,发现报 incompatible target错误,各种找不到定义.32位和64位都不行. 如果你也遇到 ...
- kafka 学习
https://kafka.apache.org/quickstart C:\W_O_R_K\kafka_2.12-2.2.0\kafka_2.12-2.2.0\bin\windows\zookeep ...