springboot项目中文件的下载(解决中文乱码问题)
最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题。
正文
在使用springboot导出excel的时候,出现了两个问题:如下
1. 导出的时候中文名乱码问题
如:鑱旂綉鍗煎叆妯℃澘.xlsx
2. 导出的时候springboot路径问题:在jar项目后会默认多一个!,导致路径错误。

具体实现思路是:
首先拿到文件名,然后拿到父路径和文件名,创建一个File,然后将此file使用response写出到客户端。对于获取父路径:使用的是类的加载器,getResource(“name”)得到的URL对象,然后获取的url.getPath(),这就造成了获取File时候创建的路径多了个!。
之后进行更改,因为获取File文件之后还是需要拿到InputStream。所以这里直接使用的是:类的加载器直接获取资源作为InputStream


接下来就是解决乱码问题:
名字进行重新编码:
然后设置一些相应类型和响应头:将流作为相应

完整版代码如下:
String file_name = "用户导入模板.xlsx";
try{
OutputStream os = response.getOutputStream();
String fileName = new String(file_name.getBytes("GBK"),"ISO-8859-1");
InputStream is = this.getClass().getClassLoader().getResourceAsStream("excelTemplate/" + file_name);
response.setContentType("application/force-download");
response.addHeader("Content-Disposition","attachment;fileName=" + fileName);
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b, 0, b.length)) != -1) {
os.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
这样就可以下载文件了并且不会出现乱码。

目前还没有遇到别的问题,有别的问题在更新。
2018-08-27更新:
在最近使用下载的时候,发现转来转去的编码比较麻烦,发现了一个 URLEncoder.encode(fileName,"UTF-8") 的方法,特此记录下。
String fileName = path.substring(path.lastIndexOf("\\") +1 ,path.length());
File file = new File(path);
if (!file.exists()){
logger.error("路径有误,文件不存在!");
}
//new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
response.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
response.setContentType("content-type:octet-stream");
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0 ;
while ((len = inputStream.read(buffer)) != -1){
outputStream.write(buffer ,0 , len);
}
inputStream.close();
outputStream.close();
使用 URLEncoder.encode(fileName,"UTF-8"),将编码转换为utf-8编码。
springboot项目中文件的下载(解决中文乱码问题)的更多相关文章
- java 读取文件到String(解决中文乱码)
在改写V&View(维视)时用到了文件管理,需要从html文档读取字符串,可是一直出现中文乱码,一直解决不了.而且很是意外,我在本地运行代码时就能正常读取中文,当放到tomcat上时全是乱码, ...
- php下载解决中文乱码问题
利用 iconv() 函数解决乱码 $file_name = iconv("utf-8","gb2312",$file_name); 具体下载代码如下: pub ...
- MySQL直接导出CSV文件,并解决中文乱码的问题
需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...
- Java读写.properties文件实例,解决中文乱码问题
package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...
- 在visual studio code 中配置python以及解决中文乱码问题
安装好 visual stuido code (下面简称 “ VSC ”)后,要想使用它运行调试 python 代码还需要做一些工作以解决下列问题: 搭建 python 环境 print 打印中文出现 ...
- JAVA之NIO按行读写大文件,完美解决中文乱码问题
;//一次读取的字节长度 File fin = new File("D:\\test\\20160622_627975.txt");//读取的文件 File fout = new ...
- Flex上传文件Java端解决中文乱码问题
1.Flex端进行编码 public function encodeStr(str:String, charSet:String):String { var result:String =" ...
- Idea中使用http请求解决中文乱码问题
以请求百度为例,使用如下代码即可解决: GET https://www.baidu.com User-Agent: Mozilla/.X MetaSr 1.0
- SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】
配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...
随机推荐
- Django小项目web聊天
WEBQQ的实现的几种方式 1.HTTP协议特点 首先这里要知道HTTP协议的特点:短链接.无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发 ...
- 分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)
MogileFS分布式文件系统特点: 1.具有raid的性能 2.不存在单点故障 3.简单的命名空间: 每个文件对应一个key:用于domain定义名称空间 4.不共享任何数据 5.传输中立,无特殊协 ...
- 4.8 Routing -- Specifying The URL Type
1. 默认的路由器使用浏览器的hash来加载应用程序的开始状态并且当你移动时同步保持.目前,这依赖于浏览器中存在的hashchange事件. 2. 假设下面的路由器,输入/#/posts/new将会把 ...
- 2017-2018-2 20165207实验二《Java面向对象程序设计》实验报告
2017-2018-2 20165207实验二<Java面向对象程序设计>实验报告 课程:Java程序设计 班级:1652 姓名:李天林 学号:20165207 实验日期:2018年4月1 ...
- 在使用swiper时,解决同一个页面使用多个轮播出现问题做法
$(".swiper-container").each(function(){ $(this).swiper({ loop: true, initialSlide :0, pagi ...
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20162314 Experiment 4 - Graph
Experiment report of Besti course:<Program Design & Data Structures> Class: 1623 Student N ...
- net.sf.json和 com.fasterxml.jackson中对象转json的区别
近期做项目的时候,发现使用net.sf.json包中的JSONObject或JSONArray将对象转为json数据结构存在一个坑.当对String类型的属性赋值为null情况下,转为json结构为& ...
- Qt无法调试Qvector
现象: 解决: 打开文件 $(VSDIR)\Common7\Packages\Debugger\autoexp.dat (VSDIR是本机Visual Studio的安装目录)把定义QVector和Q ...
- Ubuntu 14.04安装gnuplot 解决Terminal type set to 'unknown'问题 简易命令教程
参考: 照猫画虎学gnuplot之折线图 gnuplot 入门教程 1 gnuplot安装,及error:terminal type set to 'unknown'的解决 安装 sudo apt-g ...