项目在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. MVC中不能使用ViewBag

    在工程文件中添加 <Reference Include="Microsoft.CSharp" /> <Reference Include="System ...

  2. Python 列表解析list comprehension和生成表达式generator expression

    如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...

  3. 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 ...

  4. 前端绘图方式Canvas和SVG的区别

    Canvas和SVG是html5中支持2种可视化技术,都是可以在画布上绘制图形和放入图片.下面来介绍和分析一下他们. 一.Canvas 和 SVG 简介 1.什么是Canvas? Canvas 是H5 ...

  5. 句柄与MFC对象关系和相互获取

    Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装.内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中.当需要获取Windows对象的对应M ...

  6. QT 操作数据库SQLite实例

    #include "widget.h" #include <QApplication> #include <QtSql> #include <QTex ...

  7. C语言中的位操作(15)--确定log10(N)的整数部分

    本篇文章介绍一个整数的以10为底的对数的整数部分,即对于整数N,求log10(N)整数部分 方法一 : unsigned int v; //32位非0整数 int r; // r保存结果 int t; ...

  8. electron—Chromium有酒,Node有肉

    谷歌V8引擎的出现,Node.js的诞生注定要把开发模式“搅乱”. 基于云应用,服务化,定制化的应用需求不断增加后使得传统的winform开发空间越来越小,而原来做前端的空间越来越大,Node.js ...

  9. 数据分析第二篇:matplotlib 常用的几个绘图方法

    Matplotlib matplotlib是python的绘图库,使用它可以很方便的绘制出版质量级别的图形 matplotlib的基本功能 1.基本绘图 1.1 绘制坐标系中连续的线,设置线型/线宽/ ...

  10. fatal error C1071: unexpected end of file found in comment

    1.错误 #include<iostream> using namespace std; int main() { ..... return 0; } //如果把注释放到这里了,那么提交就 ...