Springboot ResponseEntity IE无法正常下载文件
项目在google浏览器下都很nice了,但当测试到IE的时候开始出现各种问题。
项目是前端js通过URL传参fileName到后台解析返回ResponseEntity
前端代码如下:
window.location.href="downPlan.do?fileName=fileName;
后台代码:
@RequestMapping({"/downPlan.do"})
//@ResponseBody
public ResponseEntity<byte[]> downPlan(HttpServletRequest request, @RequestParam("fileName") String fileName) throws Exception {
String path = "C:/check/plan/";
String fName =fileName+".xlsx";
File file = new File(path + File.separator + fName);
if(!file.exists()){
fName =fileName+".xls";
file = new File(path + File.separator + fName);
}
HttpHeaders headers = new HttpHeaders();
String downloadFielName = new String(fName.getBytes("UTF-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment",downloadFielName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
1、测试IE9下,出现错误:The valid characters are defined in RFC 7230 and RFC 3986,百度原因好像是URL中包含了超出RFC 7230和RFC 3968所定义的字符
解决方法:可以换tomcat的版本,过于麻烦
或者修改tomcat配置文件
我选了个最简单的编码 - 反编码
前端修改成
window.location.href="downPlan.do?fileName="+encodeURI(encodeURI(fileName));
后台反编码即可
fileName = URLDecoder.decode(fileName,"UTF-8");
2、IE下载文件异常,文件名是URL的地址
异常如下图:

废话不多说:HttpStatus.CREATED改为HttpStatus.OK即可以,因为IE不支持201状态
return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
3、下载文件会出现中文乱码

文件可以正常下载,但是出现乱码就很烦了。
google可以正常显示,IE则会出现乱码,header中只支持ASCII所以我们传输的文件名必须是ASCII,
String downloadFielName = new String(fName.getBytes("UTF-8"), "iso-8859-1");
google可以自动识别编码方式,会对其进行反解码,而IE则只会用GBK的方法,所以IE下载文件名还是乱码,改成以下:
String downloadFielName = new String(fName.getBytes("GBK"), "iso-8859-1");
把UTF-8改成GBK即可
详情参考大神的博客:https://yq.aliyun.com/articles/38945
Springboot ResponseEntity IE无法正常下载文件的更多相关文章
- springboot 整合 tobato 的 fastdfs 实现文件上传和下载
添加项目所需要的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...
- springboot整合vue实现上传下载文件
https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...
- springboot项目下载文件功能中-切面-导致的下载文件失败的bug
背景:使用spring提供的 ResponseEntity 和Resource结合,实现的下载文件功能 bug:Resource已经加载到了文件, 并且通过 ResponseEntity 构建了响应, ...
- Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)
一.接收参数(postman发送) 1.form表单 @RequestParam("name") String name 会把传递过来的Form表单中的name对应 ...
- Android+Spring Boot 选择+上传+下载文件
2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...
- springMVC下载文件前修改文件名字
很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了. 但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名 ...
- Javaweb向服务器上传文件以及从服务器下载文件的方法
先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...
- 微信小程序上传与下载文件
需要准备的工作: ①.建立微信小程序工程,编写以下代码. ②.通过IDE建立springboot+web工程,编写接收文件以及提供下载文件的方式,并将上传的文件相关信息记录在mysql数据库中.具体请 ...
- Spring MVC之ResposeEntity下载文件
Spring Mvc中用ResponseEntity方式下载文件如下: @RequestMapping("/download") public ResponseEntity< ...
随机推荐
- MVC中不能使用ViewBag
在工程文件中添加 <Reference Include="Microsoft.CSharp" /> <Reference Include="System ...
- Python 列表解析list comprehension和生成表达式generator expression
如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...
- Data Structure Array: Maximum sum such that no two elements are adjacent
http://www.geeksforgeeks.org/maximum-sum-such-that-no-two-elements-are-adjacent/ #include <iostre ...
- 前端绘图方式Canvas和SVG的区别
Canvas和SVG是html5中支持2种可视化技术,都是可以在画布上绘制图形和放入图片.下面来介绍和分析一下他们. 一.Canvas 和 SVG 简介 1.什么是Canvas? Canvas 是H5 ...
- 句柄与MFC对象关系和相互获取
Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装.内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中.当需要获取Windows对象的对应M ...
- QT 操作数据库SQLite实例
#include "widget.h" #include <QApplication> #include <QtSql> #include <QTex ...
- C语言中的位操作(15)--确定log10(N)的整数部分
本篇文章介绍一个整数的以10为底的对数的整数部分,即对于整数N,求log10(N)整数部分 方法一 : unsigned int v; //32位非0整数 int r; // r保存结果 int t; ...
- electron—Chromium有酒,Node有肉
谷歌V8引擎的出现,Node.js的诞生注定要把开发模式“搅乱”. 基于云应用,服务化,定制化的应用需求不断增加后使得传统的winform开发空间越来越小,而原来做前端的空间越来越大,Node.js ...
- 数据分析第二篇:matplotlib 常用的几个绘图方法
Matplotlib matplotlib是python的绘图库,使用它可以很方便的绘制出版质量级别的图形 matplotlib的基本功能 1.基本绘图 1.1 绘制坐标系中连续的线,设置线型/线宽/ ...
- fatal error C1071: unexpected end of file found in comment
1.错误 #include<iostream> using namespace std; int main() { ..... return 0; } //如果把注释放到这里了,那么提交就 ...