项目在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无法正常下载文件的更多相关文章

  1. springboot 整合 tobato 的 fastdfs 实现文件上传和下载

    添加项目所需要的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...

  2. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  3. springboot项目下载文件功能中-切面-导致的下载文件失败的bug

    背景:使用spring提供的 ResponseEntity 和Resource结合,实现的下载文件功能 bug:Resource已经加载到了文件, 并且通过 ResponseEntity 构建了响应, ...

  4. Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)

            一.接收参数(postman发送) 1.form表单 @RequestParam("name") String name 会把传递过来的Form表单中的name对应 ...

  5. Android+Spring Boot 选择+上传+下载文件

    2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...

  6. springMVC下载文件前修改文件名字

    很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了. 但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名 ...

  7. Javaweb向服务器上传文件以及从服务器下载文件的方法

    先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...

  8. 微信小程序上传与下载文件

    需要准备的工作: ①.建立微信小程序工程,编写以下代码. ②.通过IDE建立springboot+web工程,编写接收文件以及提供下载文件的方式,并将上传的文件相关信息记录在mysql数据库中.具体请 ...

  9. Spring MVC之ResposeEntity下载文件

    Spring Mvc中用ResponseEntity方式下载文件如下: @RequestMapping("/download") public ResponseEntity< ...

随机推荐

  1. Linux电源管理(3)-Generic PM之reboot过程【转】

    本文转载自:http://www.wowotech.net/pm_subsystem/reboot.html 1. 前言 在使用计算机的过程中,关机和重启是最先学会的两个操作.同样,这两个操作在Lin ...

  2. POJ 1068 Parencodings (类似括号的处理问题)

                                                                                                    Pare ...

  3. fffmpeg 提取pcm

    ffmpeg -i input.aac -codec:a pcm_f32le -ar 48000 -ac 2 -f f32le output.pcm

  4. python 正则表达式(二)

    下面列举了Python3的所有符号用法,别背,千万别背,用到时来查就行. 字符 含义 . 表示匹配除了换行符外的任何字符注:通过设置 re.DOTALL 标志可以使 . 匹配任何字符(包含换行符) | ...

  5. mysql基本语句1

    操作MySQL数据库 向表中插入数据 insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下: insert [into] 表名 [(列名1, 列名2, 列名3, ...)] ...

  6. jQuery 事件 - one() 方法

    jQuery 事件参考手册 实例 当点击 p 元素时,增加该元素的文本大小: $("p").one("click",function(){ $(this).an ...

  7. Struts2 - 配置文件中result 节点详解

    每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. 每个 action 声明都必须包含有数量足够多的 result 元素, 每个 resul ...

  8. 数据库连接池(connection pool)

    1.JDBC数据库连接池的必要性  在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: –      在主程序(如servlet.beans)中建立数据库连接. –      进行sql ...

  9. 查看字符串的编码chardet

    The Universal Character Encoding Detector chardet.detect("str") 返回:{‘confidence’:1.0,'enco ...

  10. bzoj1059ZJOI2017矩阵游戏

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选 ...