附件下载时,遇到中文附件名的兼容性问题,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. Zabbix+Orabbix监控oracle数据库表空间

    Orabbix 是设计用来为 zabbix 监控 Oracle 数据库的插件,它提供多层次的监控,包括可用性和服务器性能指标. 它提供了从众多 oracle 实例采集数据的有效机制,进而提供此信息的监 ...

  2. mui消息弹出确认框

    var btnArray = ['以后再说', '前往添加']; mui.confirm('你需要即时添加员工才可正常使用', '添加员工', btnArray, function(e) { if ( ...

  3. netty集群(一)-服务注册发现

    上篇文章介绍了如何搭建一个单机版本的netty聊天室:https://www.jianshu.com/p/f786c70eeccc. 一.需要解决什么问题: 当连接数超过单机的极限时,需要将netty ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  5. fopen函数中的mode参数

    fopen FILE * fopen ( const char * filename, const char * mode ); 其中,参数mode可取以下值: "r"read: ...

  6. Golang简单入门教程——函数进阶篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...

  7. 添加现有项目到git仓库

    情景: 做了一个项目,需要放到git仓库里 为什么做这个记录? 我们一般的操作是先有仓库, 然后 git clone  到一个空文件夹.     然后再这个空文件夹里加项目文件.  再git push ...

  8. 前台页面id为空--驼峰命名映射

    错误: 前台页面id为空,或其他数据映射问题(方案2) 原因: java的bean类属性和数据库字段命名不一致,查询的时候就不能把数据封装进bean类里,  在数据库字段命名规范中,通常使用下划线“_ ...

  9. CVE-2018-12613 phpmyadmin文件包含getshell连载(三)

    这是phpmyadmin系列渗透思路的第三篇文章,前面一篇文章阐述了通过慢查询日志getshell,本文将通过文件包含漏洞展开讨论 #001 影响版本 Phpmyadmin 4.8.0/4.8.0.1 ...

  10. Git 居然可以用来跟女神聊天?

    Git 是用来做啥的?想必码农朋友都知道,Git 是版本控制软件,是软件开发过程中团队协作不可或缺的软件. 但是,作为版本控制软件的 Git ,能跟聊天工具扯上关系吗?这二者似乎毫无关系,但脑洞大开的 ...