前端根据后端返回的数据流导出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 第 ...
随机推荐
- NS-Atmosphere payload Programmer
NS-Atmosphere payload Programmer 通过该软件将任意payload烧写到NS-Atmosphere 注入器中, 兼容windows, ubuntu, 苹果 MAC OS ...
- 机制设计原理与应用(三)Screening
目录 3 Screening 3.1 为单个不可分割的项目定价 3.1.1 对\(\theta\)的假设 3.1.2 问题描述 3.1.3 特性 3.2 为无限可分的项目定价 3.2.1 对\(\th ...
- 文献阅读——Watch Sat and LTO for CaDiCaL and Kissat
Norbert Mantheynmanthey@conp-solutions.comDresden, Germany Proceedings of SAT Competition 2022: Solv ...
- Ajax属性
如何创建一个 Ajax <script> window.onload=function(){ 1)创建一个异步调用对象 va ...
- if判断while循环
- java 为 枚举类型euum 的 某个int(Integer)字段做自增 Identity
前人所做的 java中枚举类型的自增: 链接 : https://www.h5w3.com/177055.html 1 enum MSG_TYPE { 2 MSG_LOGIN(500), 3 MSG_ ...
- Linux基础驱动开发
开始:1.要在自己的Linux源码中创建自己的模块文件.在drivers下创建自己的文件名为myled.然后创建myleds.c文件,编写源码 2.Makefile和Kconfig的设置 在myled ...
- html超链接相关代码
1. <IDOCTYPE html>< html><head><title>图像和超链接</title><meta http-equi ...
- Nginx常用经典配置|反向代理、HTTPS重定向、端口转发
二级目录映射 目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口. 如前端是https://example.com/index.html,调用的接口是https://example.co ...
- 面试题:int[] arr 和 int... arr在参数列表中是一回事儿吗?
public class Exer { public static void main(String[] args) { Base1 b1 = new Sub1(); b1.add(1,2,3); } ...