前端接收后端返回的文件流导出Excel

需求:接收后端返回的文件流导出Excel

自己项目中遇到过,亲测有效

情况二使用过程中解决的问题:

1.直接接受的文件流下载格式为txt且乱码。需要通过 下面这句代码来转成Excel:

 let url = new Blob([xmlHttp.response], { type: ‘application/vnd.ms-excel‘ });

2.文件名乱码,显示数字单词组成的随机字符串。需要后端在header中返回文件名,转义获取

//文件名
link.download = decodeURIComponent(xmlHttp.getResponseHeader("content-disposition").split(";")[1].split("filename=")[1]);

3.IE或者360兼容模式下,无法下载

//兼容IE
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
let url = new Blob([xmlHttp.response], { type: ‘application/vnd.ms-excel‘ });
window.navigator.msSaveOrOpenBlob(url, decodeURIComponent(xmlHttp.getResponseHeader("content-disposition").split(";")[1].split("filename=")[1]));
}

情况一:无需传token

href:接口地址
queryValues:传参
export function batchExport(href, queryValues) {
const link = document.createElement(‘a‘);
link.href = `${href}?${qs.stringify(queryValues)}`;
link.download = ‘导出.xls‘;
link.click();
}

情况二:header中传token,兼容IE,360兼容模式,文件名不会乱码

decodeURIComponent(xmlHttp.getResponseHeader("content-disposition").split(";")[1].split("filename=")[1] //从header中获取文件名,需后端提供,如果是前端定义的文件名,可直接 link.download = ‘文件名XXX‘
href:接口地址
queryValues:传参
export function batchExport(href, queryValues) {
  let xmlHttp = null;
  if (window.ActiveXObject) {
    xmlHttp = new window.ActiveXObject(‘Microsoft.XMLHTTP‘);
} else if (window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
}
  if (xmlHttp != null) {
xmlHttp.ContentType = ‘application/vnd.ms-excel‘;
xmlHttp.open(‘get‘, `${href}?${qs.stringify(queryValues)}`, true);
xmlHttp.setRequestHeader(‘token‘, getUserInfo().token);
xmlHttp.responseType = ‘blob‘;
xmlHttp.send();
xmlHttp.onreadystatechange = doResult;
}

  function doResult() {
    let link = document.createElement(‘a‘);
    link.style.display = ‘none‘;
    if (xmlHttp.readyState === 4) {
      if (xmlHttp.status === 200) {
        //兼容IE
        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
          let url = new Blob([xmlHttp.response], { type: ‘application/vnd.ms-excel‘ });
window.navigator.msSaveOrOpenBlob(url, decodeURIComponent(xmlHttp.getResponseHeader("content-disposition").split(";")[1].split("filename=")[1]));
}else{
      //其他浏览器
let url = createObjectURL((new Blob([xmlHttp.response],
{ type: ‘application/vnd.ms-excel‘ })));
        //文件名
link.download = decodeURIComponent(xmlHttp.getResponseHeader("content-disposition").split(";")[1].split("filename=")[1]);
link.href = url;
link.click();
}
      } else {
        message.error(‘下载失败‘);
}
    }
  }
}

每天进步一点点~

原文地址:https://www.cnblogs.com/abigting/p/12593510.html

时间: 2024-10-16 21:36:06

前端接收后端返回的文件流导出Excel的相关文章

PHPEXCEL生成excel文件与导出excel文件

<?php Header("Content-type:text/html;charset=utf-8"); error_reporting(E_ALL & ~E_NOTICE); require_once(ESF_DIR.'/zjadmin/phpexcel/Classes/PHPExcel.php'); $db->query("set names utf8"); $Info_area=array(2=>"x山区",1=

nodejs+jsxlsx使用文件流方式下载excel

本文介绍用 Node.js 中的依赖库来处理 Excel 文件,主要利用js-xlsx库来处理 Excel 文件. 问题: 1.由于公司正式服务器的权限收的很紧,站点的linux账户没有写权限,无法利用写文件的方式导出excel,于是查询资料采用文件流的方式导出. 2.因为不熟悉nodejs 导致无限踩坑. js-xlsx github地址 https://github.com/SheetJS/sheetjs 因为需要导出excel文件 则根据github上的文档显示可以采用这些方法 最简单的如

开张了。。第一次,就发一个简单的导出excel

直接开始吧...不墨迹了. 这里我就不贴代码了..直接截图,,,如果感兴趣,就手敲代码..然后图片我都会写上注释的. 我主要开发是MVC模式开发.View是CSHTML 先是前台吧 写一个按钮就行了..然后给一个onclick事件 如: <input type="button" class="readd" id="outexcel" value="导出"> 前台给显示页面加<td><input n

vue中使用axios处理post方法导出excel表格(后端返回文件流)

使用: vue.axios 接口要求: post方法.入参为json格式.出参文件流 1.请求函数 exportExcel: function(form) { return axios({ // 用axios发送post请求 method: 'post', url: '/serviceTime/exportData', // 请求地址 data: form, // 参数 responseType: 'blob', // 表明返回服务器返回的数据类型 headers: { 'Content-Typ

SpringMVC中导出Excel文件,关于弹出一个选择框,选择导出Excel文件的路径项目细节

最近项目上需要写一个导出excel功能,在开始的时候用ajax发送请求,不弹出导出路径选择框,后来在网上搜了一些资料,找到了问题所在,做一下总结: 前端页面:thymeleaf 后端语言:java 导出Excel:POI模式 1.ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的.文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件.将ajax请求改为loaction.href的形式发送请求,浏览器是可以识别二进制的

ASP.NET 将文件流写入临时文件,并打开

今天遇到一个开发任务,需要调取第三方接口,接口返回Stream文件流(pdf文件),然后供用户打印. 以下是源码: public void PrintOrderTestForpdf() { //1.创建实体 PrintOrderInfo model = new PrintOrderInfo() { ApiToken = "XXX", LabelFormat = "A4_2", OutPutFormat = "pdf", PrintCustoms

使用FileResult导出Excel数据文件

用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // 通过使用文件内容,内容类型,文件名称创建一个FileContentResult对象 // 参数:fileContents:响应的二进制文件内容 // contentType:内容类型(MIME类型) // fileDownloadName:显示在浏览器下载窗口的文件名称// // 返回结果:文件内容对象. protected internal vir

JQGrid导出Excel文件

系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件及方法 Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页.搜索.格式化.自定义按钮 Web jquery表格组件 JQGrid 的使用 - 6.准备工作 & Hello JQGrid Web jquery表格组件 JQGrid 的使用 - 7.查询数据.编辑数据.删除数据

Asp.Net MVC 使用FileResult导出Excel数据文件

用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // // 摘要: // 通过使用文件内容,内容类型,文件名称创建一个FileContentResult对象// // 参数: // fileContents: // 响应的二进制文件内容 // // contentType: // 内容类型(MIME类型) // // fileDownloadName: // 显示在浏览器下载窗口的文件名称// // 返