解决多浏览器文件下载乱码
from http://my.oschina.net/u/128568/blog/198276
先说说下载文件的方式,一般情况下,对于报表系统,导出数据时有两种方式下载,比如导出10万数据,一种是直接以流的形式传输,即直接输出数据到客户端,这种方式的坏处是一旦网络出现一点问题,比如公司杀毒给你闪断一下,下载后文件打开就会有问题;一种是直接在服务端把导出的数据写成一个本地文件,放在临时文件夹下,然后进行文件下载,这样即使比较大的数据导出也不会有问题。
接下来说说文件下载乱码的问题,由于编码不同,不同的浏览器接收文件下载方式不同,导致在某些浏览器下载时出现文件名乱码的情况,此时需要针对不同浏览器进行文件名编码:
首先在文件下载时,请求类型需要设置编码 :
1
|
request.setCharacterEncoding( "UTF-8" );
|
2
|
response.setContentType( "application/octet-stream; charset=utf-8" );
|
3
|
response.setHeader( "Content-disposition" ,
|
4
|
"attachment;" + UserAgentUtil.encodeFileName(request, fileName));
|
5
|
response.setHeader( "Content-Length" , String.valueOf(fileLength));
|
源码文件FileOperateUtil.java
最终文件名处理交给UserAgentUtil的encodeFileName:
01
|
/**
|
02
|
* 获取客户端浏览器类型、编码下载文件名
|
03
|
*
|
04
|
* @param request
|
05
|
* @param fileName
|
06
|
* @return String
|
07
|
* @author 夏天松
|
08
|
* @date 2014-1-9
|
09
|
*/
|
10
|
public static String encodeFileName(HttpServletRequest request, String fileName) {
|
11
|
String userAgent = request.getHeader( "User-Agent" );
|
12
|
String rtn = "" ;
|
13
|
try {
|
14
|
String new_filename = URLEncoder.encode(fileName, "UTF8" );
|
15
|
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
|
16
|
rtn = "filename=\"" + new_filename + "\"" ;
|
17
|
if (userAgent != null ) {
|
18
|
userAgent = userAgent.toLowerCase();
|
19
|
// IE浏览器,只能采用URLEncoder编码
|
20
|
if (userAgent.indexOf( "msie" ) != - 1 ) {
|
21
|
rtn = "filename=\"" + new_filename + "\"" ;
|
22
|
}
|
23
|
// Opera浏览器只能采用filename*
|
24
|
else if (userAgent.indexOf( "opera" ) != - 1 ) {
|
25
|
rtn = "filename*=UTF-8''" + new_filename;
|
26
|
}
|
27
|
// Safari浏览器,只能采用ISO编码的中文输出
|
28
|
else if (userAgent.indexOf( "safari" ) != - 1 ) {
|
29
|
rtn = "filename=\"" + new String(fileName.getBytes( "UTF-8" ), "ISO8859-1" ) + "\"" ;
|
30
|
}
|
31
|
// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
|
32
|
else if (userAgent.indexOf( "applewebkit" ) != - 1 ) {
|
33
|
new_filename = MimeUtility.encodeText(fileName, "UTF8" , "B" );
|
34
|
rtn = "filename=\"" + new_filename + "\"" ;
|
35
|
}
|
36
|
// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
|
37
|
else if (userAgent.indexOf( "mozilla" ) != - 1 ) {
|
38
|
rtn = "filename*=UTF-8''" + new_filename;
|
39
|
}
|
40
|
}
|
41
|
} catch (UnsupportedEncodingException e) {
|
42
|
e.printStackTrace();
|
43
|
}
|
44
|
return rtn;
|
45
|
}
|
源码文件:UserAgentUtil.java
这样在进行文件下载时,使用这个工具类对文件名进行一次编码,就可以处理不同浏览器下载文件乱码的问题了。
解决多浏览器文件下载乱码相关推荐
- 解决各个浏览器文件下载出现文件名中文乱码问题
/*** 解决各个浏览器文件下载中文乱码问题* @param filename* @return*/public static String getFileName(HttpServletReques ...
- 解决IE浏览器URL乱码的问题
解决IE浏览器URL乱码的问题 参考文章: (1)解决IE浏览器URL乱码的问题 (2)https://www.cnblogs.com/webgis-ling/p/11445649.html (3)h ...
- win10浏览器 html乱码怎么解决,win10浏览器乱码如何解决_win10浏览器字体乱码修复方法...
作为用来显示在万维网或局域网等内的文字.图像及其他信息的win10浏览器,帮助用户完成了一些交互操作,可是有的用户在打开win10浏览器时字体全都是乱码的状况出现,那么win10浏览器乱码如何解决呢? ...
- 浏览器文件下载和图片显示(流形式)
浏览器文件下载:如果你想在浏览器中实现下载功能--一些原本不默认下载的文件,如:jpg.xml等. 图片显示(流形式):如果你想在浏览器中显示图片,而图片不是一个静态文件(没有url地址) 那我们应该 ...
- 火狐浏览器中文乱码怎么办 Firefox中文乱码解决方法
核心提示:最近好多网友反映在使用火狐浏览器的时候,网页显示乱码的情况,这种问题通常是由于我们浏览器语言的设置有关系,下面小编就为大家分析下具体的解决办法,希望对大家有所帮助. 火狐浏览器中文乱码怎么办 ...
- Win10系统浏览器字体乱码如何解决
核心提示:[Win10系统浏览器字体乱码如何解决?一起看看吧!](http://www.f8pc.cn/rjjc/66390.html) 目前,部分电脑用户在升级了Win10系统之后,都遇到了一些使用 ...
- win10浏览器html乱码,win10系统浏览器字体乱码的解决方法
很多小伙伴都遇到过win10系统浏览器字体乱码的困惑吧,一些朋友看过网上零散的win10系统浏览器字体乱码的处理方法,并没有完完全全明白win10系统浏览器字体乱码是如何解决的,今天小编准备了简单的解 ...
- 360打开html乱码怎么办,360浏览器出现乱码怎么回事_360浏览器页面乱码如何解决-win7之家...
虽然windows系统中都自带有浏览器,不过很多用户还是喜欢下载安装360浏览器来使用,然而在使用过程中,可能会遇到出现乱码的情况,一般导致这样问题的原因有很多种,比如是中病毒了或者是误操作引起,现在 ...
- 360 html页面乱码,360浏览器出现乱码的解决方法
在使用浏览器的时候,出现乱码的这种情况非常的少见,如果用户在使用浏览器的时候出现了乱码的情况要如何解决呢,首先我们要知道这是由于什么引起的,有可能是因为杀毒的过程中使用了什么功能,也可以是因为中毒,然 ...
最新文章
- win7安装redis
- 《Adobe Photoshop CC经典教程(彩色版)》—第4课4.7节添加调整图层
- autojs定时可以选定日期吗_什么是定时插座?公牛定时插座怎么用?
- linux 内核代码构架图
- java 进程同步代码_java 实现进程间的同步(源代码)
- 罗永浩签约抖音后,带货首秀或将献给小米,你看好这笔生意吗?
- 苹果平板买哪款最好?
- Doug Lea 在 J.U.C 包里面写的 BUG 又被网友发现了......
- ARCGIS制作三维地图教程(BIGEMAP)
- 【场景实战】 头像违规的审查场景
- HTML Web教程
- duilib开发(十):动态添加控件
- 功率因数cosφ仪表盘
- PS怎么把模糊的照片,变得更加清晰
- VAT number 增值税号码以及GST
- Xposed快速入门例子(二)----- 调方法的合适时机
- C1128 和C4503
- chrome扩展程序安装_如何从Chrome网上应用店外部安装扩展程序
- 震动环境如何使用称重传感器
- 学生成绩分等级 --if形式
热门文章
- 【JZOJ5034】B 题解
- 东南亚共享充电宝方案/案列/APP/小程序/项目/网站
- 局域网网速变慢 5种可行解决方案
- UPX is not available 解决办法
- 几楼电路精灵——Cadence Allegro PCB对比
- 野蛮删除腾讯电脑管家
- SVN报错之“Failed to run the WC DB work queue associated with...“的解决方法
- 电商 mongodb mysql,MongoDB电商数据建模
- 网站跳转到cgi-sys/defaultwebpage.cgi的原因和解决方式
- Linux常用硬盘管理命令详解!