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

这样在进行文件下载时,使用这个工具类对文件名进行一次编码,就可以处理不同浏览器下载文件乱码的问题了。

解决多浏览器文件下载乱码相关推荐

  1. 解决各个浏览器文件下载出现文件名中文乱码问题

    /*** 解决各个浏览器文件下载中文乱码问题* @param filename* @return*/public static String getFileName(HttpServletReques ...

  2. 解决IE浏览器URL乱码的问题

    解决IE浏览器URL乱码的问题 参考文章: (1)解决IE浏览器URL乱码的问题 (2)https://www.cnblogs.com/webgis-ling/p/11445649.html (3)h ...

  3. win10浏览器 html乱码怎么解决,win10浏览器乱码如何解决_win10浏览器字体乱码修复方法...

    作为用来显示在万维网或局域网等内的文字.图像及其他信息的win10浏览器,帮助用户完成了一些交互操作,可是有的用户在打开win10浏览器时字体全都是乱码的状况出现,那么win10浏览器乱码如何解决呢? ...

  4. 浏览器文件下载和图片显示(流形式)

    浏览器文件下载:如果你想在浏览器中实现下载功能--一些原本不默认下载的文件,如:jpg.xml等. 图片显示(流形式):如果你想在浏览器中显示图片,而图片不是一个静态文件(没有url地址) 那我们应该 ...

  5. 火狐浏览器中文乱码怎么办 Firefox中文乱码解决方法

    核心提示:最近好多网友反映在使用火狐浏览器的时候,网页显示乱码的情况,这种问题通常是由于我们浏览器语言的设置有关系,下面小编就为大家分析下具体的解决办法,希望对大家有所帮助. 火狐浏览器中文乱码怎么办 ...

  6. Win10系统浏览器字体乱码如何解决

    核心提示:[Win10系统浏览器字体乱码如何解决?一起看看吧!](http://www.f8pc.cn/rjjc/66390.html) 目前,部分电脑用户在升级了Win10系统之后,都遇到了一些使用 ...

  7. win10浏览器html乱码,win10系统浏览器字体乱码的解决方法

    很多小伙伴都遇到过win10系统浏览器字体乱码的困惑吧,一些朋友看过网上零散的win10系统浏览器字体乱码的处理方法,并没有完完全全明白win10系统浏览器字体乱码是如何解决的,今天小编准备了简单的解 ...

  8. 360打开html乱码怎么办,360浏览器出现乱码怎么回事_360浏览器页面乱码如何解决-win7之家...

    虽然windows系统中都自带有浏览器,不过很多用户还是喜欢下载安装360浏览器来使用,然而在使用过程中,可能会遇到出现乱码的情况,一般导致这样问题的原因有很多种,比如是中病毒了或者是误操作引起,现在 ...

  9. 360 html页面乱码,360浏览器出现乱码的解决方法

    在使用浏览器的时候,出现乱码的这种情况非常的少见,如果用户在使用浏览器的时候出现了乱码的情况要如何解决呢,首先我们要知道这是由于什么引起的,有可能是因为杀毒的过程中使用了什么功能,也可以是因为中毒,然 ...

最新文章

  1. win7安装redis
  2. 《Adobe Photoshop CC经典教程(彩色版)》—第4课4.7节添加调整图层
  3. autojs定时可以选定日期吗_什么是定时插座?公牛定时插座怎么用?
  4. linux 内核代码构架图
  5. java 进程同步代码_java 实现进程间的同步(源代码)
  6. 罗永浩签约抖音后,带货首秀或将献给小米,你看好这笔生意吗?
  7. 苹果平板买哪款最好?
  8. Doug Lea 在 J.U.C 包里面写的 BUG 又被网友发现了......
  9. ARCGIS制作三维地图教程(BIGEMAP)
  10. 【场景实战】 头像违规的审查场景
  11. HTML Web教程
  12. duilib开发(十):动态添加控件
  13. 功率因数cosφ仪表盘
  14. PS怎么把模糊的照片,变得更加清晰
  15. VAT number 增值税号码以及GST
  16. Xposed快速入门例子(二)----- 调方法的合适时机
  17. C1128 和C4503
  18. chrome扩展程序安装_如何从Chrome网上应用店外部安装扩展程序
  19. 震动环境如何使用称重传感器
  20. 学生成绩分等级 --if形式

热门文章

  1. 【JZOJ5034】B 题解
  2. 东南亚共享充电宝方案/案列/APP/小程序/项目/网站
  3. 局域网网速变慢 5种可行解决方案
  4. UPX is not available 解决办法
  5. 几楼电路精灵——Cadence Allegro PCB对比
  6. 野蛮删除腾讯电脑管家
  7. SVN报错之“Failed to run the WC DB work queue associated with...“的解决方法
  8. 电商 mongodb mysql,MongoDB电商数据建模
  9. 网站跳转到cgi-sys/defaultwebpage.cgi的原因和解决方式
  10. Linux常用硬盘管理命令详解!