附件下载时,遇到中文附件名的兼容性问题,firefox、chrome、ie三个派系不兼容,通过分析整理,总结出处理该问题的办法,记录如下:

1、文件名编码

服务器默认使用的是ISO8859-1,而我们java代码里默认用的是UTF-8,所以需要在传给服务器时转换一下

2、浏览器对文件名的处理方式

微软在处理附件文件名时,是使用的URL解码处理,所以需要对微软系的浏览器进行单独处理

代码如下:

    public String dealAttachmentName(HttpServletRequest req, String fileName) throws UnsupportedEncodingException {
String userAgent = req.getHeader("user-agent");
boolean isMSBrowser = HttpUtils.isMSBrowser(userAgent);
// URLEncoder 对于 空格 的转码混乱,有时转成"%20",有时转换成 "+",所以统一处理一下
return isMSBrowser ? URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20") : new String(fileName.getBytes("UTF-8"), "ISO8859-1");
}
/**
* @description:
* @projectName:mysteel-oilchem-information-columnlist
* @see:com.mysteel.oilchem.cms.web.utils
* @author:郑晓龙
* @createTime:2019/4/28 10:03
* @version:1.0
*/
public class HttpUtils {
private static String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"}; /**
* description 判断是否是微软的浏览器
* 微软浏览器附件名用URLencoder编码
* param [request]
* return boolean
* author 郑晓龙
* createTime 2019/4/28 10:05
**/
public static boolean isMSBrowser(String userAgent) {
if (userAgent != null) {
for (String signal : IEBrowserSignals) {
if (userAgent.contains(signal))
return true;
}
}
return false;
} }

文件名编码问题处理完成后,在响应头里设置一下就可以了:

    response.setHeader("Content-disposition","attachment; filename=" + realFilename);

参考:

servlet常见乱码及解决办法

[JAVA]解决不同浏览器下载附件的中文名乱码问题的更多相关文章

  1. Java 解决IE浏览器下载文件,文件名出现乱码问题

    /** * 区分ie 和其他浏览器的下载文件乱码问题 * @param request * @param fileName * @return */ public String getFileName ...

  2. Java 使用IE浏览器下载文件,文件名乱码问题

    使用Servlet实现文件下载功能时,使用IE下载出现文件名乱码; 网上常见的解决办法是通过"user-agen"来判断浏览器: if (req.getHeader("u ...

  3. Java使用IE浏览器下载文件,文件名乱码问题

    String userAgent = request.getHeader("user-agent").toLowerCase(); if (userAgent.contains(& ...

  4. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

  5. ie浏览器下载文件时文件名乱码

    做一个文件下载功能时,用ie浏览器下载时文件名乱码,火狐和谷歌正常,修改后ie显示正常,修改方法如下: @RequestMapping(value = "fileDownload" ...

  6. IE浏览器下载文件中文文件名乱码问题解决

    处理过程 根据IE的F12中的log提示,是因为http头信息中的编码替换了html文件中的编码.我最初的思路是设置Tomcat默认编码,但是我发现我已经在Server.xml中设置过,想到这里我想到 ...

  7. 修改nginx配置文件解决dx2.5下载附件停止不动的问题

    在下载论坛附件的时候,总是停止在某个字数数不动 如下图 后来查看log发现 如下图 权限拒绝 发现后nginx的配置文件的启动者有关系 改了下 user 为 root 居然好了

  8. java版模拟浏览器下载百度动漫图片到本地。

    package javaNet.Instance.ImageDownload; import java.io.BufferedReader; import java.io.File; import j ...

  9. 浏览器下载附件Content-Disposition

    Content-disposition是MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)协议的扩展,MIME协议指示MIME用户代理如何 ...

随机推荐

  1. hadoop知识整理(5)之kafka

    一.简介 来自官网介绍: 翻译:kafka,是一个分布式的流处理平台.LinkedIn公司开发.scala语言编写.   1.支持流处理的发布订阅模式,类似一个消息队列系统: 2.多备份存储,副本冗余 ...

  2. Brainman(规律题)【数学思想】

    Brainman 题目链接(点击) Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12942   Accepted: 650 ...

  3. ojdbc6中OraclePreparedStatement的ArrayIndexOutOfBoundsException异常BUG-6396242

    现场信息 Caused by: java.lang.ArrayIndexOutOfBoundsException: -32203 at oracle.jdbc.driver.OraclePrepare ...

  4. mysql explain的extra

    导读 extra主要有是那种情况:Using index.Using filesort.Using temporary.Using where Using where无需多说,就是使用了where筛选 ...

  5. python常见数据类型及操作方法

    title: "python数据类型及其常用方法" date: 2020-04-21T10:15:44+08:00 可变数据类型:允许变量的值发生变化,即如果对变量进行append ...

  6. 西门子S7-300 PLC视频教程(百度网盘)收集于网络-供参考学习

    百度网盘地址: 西门子300 PLC视频教程 群文件里面可以找到. 下载: https://blog.csdn.net/txwtech/article/details/93016190

  7. SLAM:使用EVO测评ORBSLAM2

    SLAM:使用EVO测评ORBSLAM2 EVO是用来评估SLAM系统测量数据以及输出估计优劣的Python工具,详细说明请参照: https://github.com/MichaelGrupp/ev ...

  8. 【服务器】VMware Workstation Pro虚拟机搭建本地服务器CentOs7和宝塔面板(保姆式教程)

    内容繁多,请耐心跟着流程走,在过程中遇到问题请在下面留言. 前言 这几天一直在复习thinkphp5.1,学习环境是phpStudy8.1,但是遇到了文件有缓存的问题(thinkphp5.1.39,修 ...

  9. 大型ECShop安装搬家升级错误问题最全攻略

    [引子] 最近将ECShop框架网站从租用服务器搬家至阿里云,虽然模块及功能上已经被修改的面目全非了,但基础部分还在. 在这个过程中遇到了很多的WARNING与ERROR,解决方案如下. [环境] 服 ...

  10. SpringBoot项目jar包启动脚本

    startup.bat @echo off set path=X:\xxxxxxx\Java\JDK\jre\bin START "项目名" "%path%\java&q ...