项目在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. eclipse新建Maven项目

    1.在eclipse中安装maven插件 2.点击File->new->maven project,出现弹窗后点击next. 接着在弹窗Select an Archetype中,filte ...

  2. ubuntu14.04 spring cloud config server + gradle搭建

    Server端:在eclipse上,创建Java Project项目.自带的src包删掉手动建文件夹.基础的目录文件都创建上 |--ZSpringCloud|--build.gradle|----sr ...

  3. thinkphp 的 Action 控制器中的系统常量总结

    THINK_PATH // ThinkPHP系统目录 APP_PATH // 当前项目目录 APP_NAME // 当前项目名称 CONTROLLER_NAME // 当前控制器名称 MODULE_N ...

  4. 遇到“拒绝了对对象的 EXECUTE 权限”和“无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限”的问题

    在将数据库从sqlserver2000迁移到2005后,原有的用户名TDS在执行存储过程是报错:“拒绝了对对象的 EXECUTE 权限”. 如网上所说,在使用的数据库的属性页->权限中给TDS添 ...

  5. 算法(Algorithms)第4版 练习 2.1.25

    代码实现: package com.qiusongde; import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdOut; ...

  6. Add Tags to Neutron Resources

    给一个network加上tag,用来: Ability to map different networks in different OpenStack locations to one logica ...

  7. 英语发音规则---(e)s和-(e)d的读音规则

    英语发音规则---(e)s和-(e)d的读音规则 一.总结 一句话总结: 1.大部分可数名词的复数及动词第三人称单数的一般现在式,是以-(e)s结尾的? moths,glasses:digs,teac ...

  8. Linux各个文件夹的主要作用 (源地址

    (源地址blog.csdn.net/lonelysky/article/details/5374230,侵删) linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev ...

  9. 分享知识-快乐自己:Spring切入点的表达式和通知类型

    1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...

  10. 数据结构C语言版干货------->线性表之顺序表

    一:头文件定义 /*************************************************************************** *项目 数据结构 *概要 逻辑 ...