最近使用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 ...
随机推荐
-
visio个人专注
字体颜色 1 填充 2 标注 3 箭头 4 线条 5 粗细 6
-
为view添加约束constraints
在相应要设置约束的view中按住鼠标右键进行拖拽,然后向指定的方向添加约束,如图: 拖拽的时候会显示一条蓝线,如上图所示,然后手指离开鼠标的时候会弹出向对应的约束供添加约束的时候进行使用如图:
-
发现了一个制作iOS图标的利器
我制作的第一个Swift Demo已经将近完工,今天的任务便是给它添加图标.不过Xcode中对图标尺寸的要求还真是严苛,若是制作iPhone和iPad通用的应用,总共需要12种尺寸的图标,这对于美工功 ...
-
JDK 动态代理分析
Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于 ...
-
Mysql 索引的基础(下)
如果需要存储大量的URL并需要根据URL进行搜索查找.如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长.正常情况下会有如下查询: SELECT id FROM url WH ...
-
Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...
-
LeetCode OJ 33. Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
-
C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流. 本教程介绍如何从文件读取流和向文件写入流.这就需要用到 C++ ...
-
Linux-Linux下安装redis报错";undefined reference to__sync_add_and_fetch_4";解决办法
如果出现这种错误可以在make的时候加上CFLAGS="-march=i686" 即 make CFLAGS="-march=i686" ----------- ...
-
js中window对象详解以及页面跳转
1.window.top.window.location = "index.asp"; 2.window.top.location.href="index.asp&quo ...