原因:ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。

解决方法:使用form表单提交实现文件下载

1,后台代码实现方法:

// 生成excel文件@RequestMapping(value = "/study", method = RequestMethod.POST)public void study(@RequestBody ParamVO paramVO, HttpServletResponse response) throws UnsupportedEncodingException {response.setContentType("application/octet-stream;charset=utf-8");response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment;filename=" + new String(paramVO.getFileName().getBytes("utf-8"), "iso-8859-1"));try (ByteArrayOutputStream bos = templateService.excel(paramVO);BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream())) {out.write(bos.toByteArray());response.setHeader("Content-Length", String.valueOf(bos.toByteArray().length));} catch (Exception e) {e.printStackTrace();}}

2,前端页面使用Ajax下载文件

var xhr = new XMLHttpRequest();xhr.open('post', 'http://localhost:8080/user/export', true);xhr.responseType = 'blob';xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');xhr.onload = function () {if (this.status == 200) {var blob = this.response;var a = document.createElement('a');var url = window.URL.createObjectURL(blob);a.href = url;//设置文件名称a.download = '用户信息.xls';a.click();}}xhr.send(JSON.stringify({"type" : 1,"startDate" : "2018-01-01","endDate" : "2018-12-31"}));}

或者前端也可以这样实现:

{var xhr = new XMLHttpRequest();xhr.open('post', 'http://localhost:8080/user/export', true);xhr.responseType = 'blob';xhr.onload = function () {var blob = this.response;if(window.navigator.msSaveOrOpenBlob){window.navigator.msSaveBlob(blob, 'msSaveBlob_testFile.txt');}else{var link = document.createElement('a');link.href = window.URL.createObjectURL(blob);link.download = 'msSaveBlob_testFile.txt';link.click();window.URL.revokeObjectURL(link.href);}xhr.send(null);}
}

本文转自:https://blog.csdn.net/hj7jay/article/details/86309968

转载于:https://www.cnblogs.com/nizuimeiabc1/p/10534415.html

用ajax下载字节流形式的excel文件相关推荐

  1. 下载后端传来的excel文件

    html内容 <el-button size="small" type="primary" @click="exprotExcel"& ...

  2. 通过XML转换下载.xlsx格式的excel文件

    在SAP系统中,通过SE11显示一个table的内容,可以发现ALV grid的显示界面上有个spread sheet的标准按钮,点击这个按钮可以将显示的内容下载成excel文件,其中也包括扩展名.x ...

  3. node-xlsx 生成并下载有超链接的excel文件

    需求:将微信小程序云数据库中的数据导出为excel文件,文件按团队分为不同的sheet页,首页汇总每个sheet页的数据总数,并可点击跳转至对应的sheet页.下载时可选择今年某月份进行下载对应的数据 ...

  4. 前端用 js-file-download组件 下载后端返回的Excel文件

    后端接口返回的Excel的文件流需要导出让浏览器下载文件 一.先安装 js-file-download组件 npm install js-file-download --save 二.在对应使用的页面 ...

  5. Vue下载blob类型的excel文件:

    1.思路: 1.请求时加上 responseType: 'blob', 2.处理并下载 2.案例: // 获取收货单位的导入模板 /api/consignee/getTemplate get expo ...

  6. 前端JS通过Ajax下载后端返回的Excel文档

    我们来看下效果演示: 条件假设: 首先得有一个下载文档的接口,我们假设这个接口的地址是myurl 其次我们一般使用token来区分用户是否有权下载,假设令牌为token html部分比较简单 < ...

  7. js下载后台返回的excel文件流

    注意:用jQuery ajax - ajax() 方法是获取不到请求成功的数据的. var xhr= new XMLHttpRequest();xhr.open("GET", &q ...

  8. ajax读取xlsx文件,从Ajax中的服务器响应获取Excel文件(.xlsx)

    在获得该文件的响应(成功的ajax方法)后,获取Excel文件并在浏览器中打开下载窗口时出现问题.我已经合适了Content-Type and Content-Disposition headers, ...

  9. Win10 基于excel 文件的python下载脚本

    1.安装wget命令行 安装wget命令,选择win10 64 版本. https://eternallybored.org/misc/wget/ 为了方便使用,可以加系统路径,或直接放C:\Wind ...

最新文章

  1. 通俗易懂word2vec详解词嵌入-深度学习
  2. 史上最全的Web性能测试工具大全(下 )
  3. Cracking the coding interview--Q1.7
  4. 使用fprintf()函数格式化输出至磁盘文件和是stdout
  5. Entity Framework CodeFirst尝试
  6. boost bind使用指南
  7. 科大星云诗社动态20210418
  8. c# 读取txt方法
  9. iOS 合并静态库出现 can't move temporary file错误
  10. 谷歌约束控件(ConstraintLayout)扁平化布局入门
  11. 我的世界服务器怎么修改标语,我的世界怎么用资源包修改闪烁标语
  12. Ubuntu 截图工具
  13. 神经网络模型怎么建立,如何选择神经网络模型
  14. 三星推出体积更小的1亿像素图像传感器产品线
  15. 堆叠实验-典型配置H3C IRF
  16. WebGoat教程解析——Hijack a Session
  17. POJ 3295.Tautology
  18. 黑客为“炫技”随机攻击,结果被“顺着网线”抓了
  19. 计算机里的word怎么重装,word能卸载重装吗 word卸载重装
  20. MySql轻功-存储过程

热门文章

  1. 龙星电脑横机制版软件_简用仓库管理软件v8.6.3-简用仓库管理软件电脑版下载...
  2. 乐橙等待登录返回超时_等待登录返回超时什么意思
  3. python sizeof_python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗 赋值语句的原理...
  4. python开发效率怎样_Python 的开发效率真的比 Java高吗?
  5. 使用k8s安装minio
  6. Command line is too long. Shorten command line for Doc.generateAsciiDocs or
  7. com.alibaba.fastjson.JSONObject之对象与JSON
  8. c++分割字符串方法
  9. [fastjson] - fastjson中 JSONObject 和 JSONArray
  10. Spring是如何注解的