Vue接收后端传过来excel表格的文件流并下载
题外话:当接收文件流时要确定文件流的类型,但也有例外就是application/octet-stream类型,主要是只用来下载的类型,这个类型简单理解意思就是通用类型类似 var 、object、array 这样什么都可以存的类型,传到前端就是一堆文字没有类型需要指定(后面说)
需要asp.net core后端代码的可以访问https://www.cnblogs.com/liaote/p/15411667.html
首先要先看看后端传过来的是一些什么东西,要是传过来就不对那不是花冤枉功夫改
这是传过来正确格式也就是可以接收的格式(blob类型)

下面这种时错误的格式,但不是数据出错,是类型。上面说了这是一个通用类型,所以必须指定类型才能正确显示

vue接收asp.core传过来的文件流,跟asp.net视图用a标签点击下载类似但不同
当然如果不考虑安全性并不需要token验证等可以直接下载
this.axios.get("api/xxx/xxxx",this.xxx)
.then((res)=>{
if(typeof res.data.downloadId=='undefined')this.$message.error(res.data.msg);
else{
const elink=document.createElement('a');
elink.style.display='none';
elink.href='/api/地址/xxxid='+res.data.downloadId;
elink.target='_blank';
elink.click();
}
});
下面这是我们接收的时候一般是这样通过接口让后端传值过来 ,但是这种访问后端接口返回回来的是错误的格式,正确的是需要传递一个blob类型到后端确定类
var filename='下载.xlsx';
this.axios.get("api/xxx/xxxx",this.filter)
.then((res)=>{
let blob=new Blob([res.data],{type:res.data.type})
//兼容ie
if(window.navigator && window.navigator.msSaveBlob){
window.navigator.msSaveBlob(blob,filename);
}else{
var downloadElement=document.createElement('a');
var href=window.URL.createObjectURL(blob);
downloadElement.href=href;
downloadElement.download=filename;
document.body.appendChild(downloadElement);
downloadElement.click();
window.URL.revokeObjectURL(href);
}
});
正确为下面代码 前端需要传递一个 responseType:'blob' 指定类型到后端处理确定类型 后端也要加一个[FromQuery]属性,这样前端来确定类型和后端就区分开了,后端只需要传通用类型就可以了 **注意要使用get请求,后端需要加一个字段,post请求传递这个类型无用
var filename='下载.xlsx';
this.axios.get("api/xxx/xxx",{params:this.filter,responseType:'blob'})//这里的传递要加responseType:'blob'指定类型,后端不需要处理这个类型,只需要传过去就行
.then((res)=>{
let blob=new Blob([res.data],{type:res.data.type})//就是这里一点差距
//兼容ie
if(window.navigator && window.navigator.msSaveBlob){
window.navigator.msSaveBlob(blob,filename);
}else{
var downloadElement=document.createElement('a');//模拟一个a标签与asp.net试图操作类似
var href=window.URL.createObjectURL(blob);//转成链接让其能供人下载
downloadElement.href=href;//a标签的href
downloadElement.download=filename;//a标签的下载名字
document.body.appendChild(downloadElement);//注册这个控件将这个组件加到body尾部
downloadElement.click();//注销掉
window.URL.revokeObjectURL(href);//清除生成的链接,会占用一些东西,不知道啥,反正运行慢点
}
});
后端也需要处理一下让前端能自己确定类型 加一个[FromQuery]来接收 ,不加的话get后端不接收前端请求,post又收不到类型
public async Task<IActionResult> xxx([FromQuery]Model model)//需要加一个[FromQuery]
// [FromHeader] 请求标头
// [FromQuery] 请求查询字符串参数
// [FromForm] 请求正文中的表单数据
// [FromBody] 请求正文
// [FromRoute] 当前请求中的路由
// [FromServices] 作为操作参数插入的请求服务
这样前端就能接收到正确的格式的文件流,以下就可以看到有文件流类型并能看到格式化了不是乱糟糟一团

需要asp.net core后端代码的可以访问https://www.cnblogs.com/liaote/p/15411667.html
希望上述内容能帮助到你
Vue接收后端传过来excel表格的文件流并下载的更多相关文章
- js要怎么接收后端传的excel文件流?
方法1: 无需js,直接用a标签去接你的输出流 <a href="<你的返回流的Action路径>" >下载</a> 方法2:使用js,前提是你 ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- js接收文件流并下载
js接收文件流并下载 标签(空格分隔): js 在此输入正文 <script type="text/javascript"> function download(fil ...
- vue项目使用js-xlsx进行excel表格的导入和导出方法的简单原型封装
前提:已经安装好 file-saver xlsx和 script-loader,如未安装,请查看 https://www.cnblogs.com/luyuefeng/p/8031597.html 新建 ...
- 图片上传利用request.getInputStream()获取文件流时遇到的问题
图片上传功能是我们web里面经常用到的,获得的方式也有很多种,这里我用的是request.getInputStream()获取文件流的方式.想要获取文件流有两种方式,附上代码 int length = ...
- Vue导出json数据到Excel表格
一.安装依赖 npm install file-saver --save npm install xlsx --save npm install script-loader --save-dev 二. ...
- 从数据库的表导出到Excel表格中【让客户端下载的Excel】
原文发布时间为:2008-10-11 -- 来源于本人的百度文章 [由搬家工具导入] 这个例子是从gridview中导出到Excel,可以举一反三,可以直接从数据库中取值放在DataSet中,然后再从 ...
- 精讲RestTemplate第6篇-文件上传下载与大文件流式下载
本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- 如何在SimpleNVR用Excel表格将通道配置简单化
进入本世纪的第三个十年,流媒体们"绞尽脑汁",依靠技术不断提升用户的体验感.熟悉SimpleNVR的用户都知道,目前SimpleNVR已实现对接自有流媒体服务器平台,不限制观看人数 ...
随机推荐
- 除PerfDog之外,还有什么性能测试工具。
除PerfDog之外,还有什么性能测试工具. 高通的Snapdragon Profiler 下载地址:https://developer.qualcomm.com/software/snapdrago ...
- IIS中配置WCF站点
http://msdn.microsoft.com/zh-cn/library/aa751852.aspx http://blog.csdn.net/hsg77/article/details/389 ...
- Python中with...as...的用法详解
简介 with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try-.exc ...
- 使用Git上传项目到GitHub仓库
GitHub账号注册很长时间了,但是没怎么上传过东西.今天学习如何利用Git工具将代码上传到GitHub,了解了一些常用命令 $ git config --global user.name " ...
- Roslyn(CSharpScript).Net脚本编译引擎使用过程内存增涨与稳定的方式
目 录 1. 引用程序集... 1 2. 内存增涨的情况... 2 3. 内存稳定的情况... 4 1. 引用程序集 Roslyn 是微软公司开源的 .N ...
- 什么是云效 Projex,云效Projex企业级高效研发项目管理平台
云效项目协作Projects是一款企业级高效研发项目管理平台, 提供了快速实践的敏捷研发项目管理机制,提供对需求.迭代.缺陷各个维度的协同管理以及相关的统计报告,让研发团队高效协作.践行敏捷并持续交付 ...
- Shell系列(30)- 单分支if语句判断分区使用率
需求 监控分区已用空间,超过80%,抛出警告 脚本 #!/bin/bash #给tets赋值用于接收参数,传递给if进行判断 #申明变量test并赋值,由于赋的值是系统变量的结果,所以得用$()引用 ...
- MySql分区、分表和分库
MySql分区.分表和分库 数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈.需要进行数据的处理,采用的手段是分区.分片.分库.分表. 一些问题的解释: 1.为什么要分表和分区? 日常开发中 ...
- 【原创】linux mint 17.3 kvm 安装windows7虚拟机
一.安装windows7虚拟机 linux mint 17.3是一个不错的桌面发行版本,我下载了 linux mint 17.3 for xfce 桌面版本,运行速度没得说,而且安装设置都挺简单,非常 ...
- AT2368-[AGC013B]Hamiltonish Path【构造】
正题 题目链接:https://www.luogu.com.cn/problem/AT2368 题目大意 给出 \(n\) 个点 \(m\) 条边的一张无向图,然后求一条路径满足 路径长度不小于二. ...