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

1、文件名编码

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

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

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

代码如下:

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

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

  1. 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. https绕过证书认证请求 Get或Post请求(证书过期,忽略证书)

    报错信息 解决: postman方式 java请求 报错信息 javax.net.ssl.SSLHandshakeException: sun.security.validator.Validator ...

  2. 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)

    所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...

  3. Debian安装无线网卡Ralink RL5390驱动

    惠普一体机用的无线网卡是Ralink的 RL5390,安装Debian10以后没有驱动,网上下载firmware-misc-nonfree_20190114-2_all.deb 和firmware-r ...

  4. 1.4 Spring 依赖注入(DI)和控制反转(IOC)详解

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  Spring 依赖注 ...

  5. windows tcp server select

    #include <stdio.h> #include <tchar.h> #include <winsock2.h> #include <iostream& ...

  6. Python字符串处理 - str/bytes

    目录 1. str 2. bytes / bytearray 3. printf-style String Formatting 1. str homepage str.count(sub[, sta ...

  7. 使用Apache Spark和Apache Hudi构建分析数据湖

    1. 引入 大多数现代数据湖都是基于某种分布式文件系统(DFS),如HDFS或基于云的存储,如AWS S3构建的.遵循的基本原则之一是文件的"一次写入多次读取"访问模型.这对于处理 ...

  8. VSCode + WSL 2 + Ruby环境搭建详解

    vscode配置ruby开发环境 vscode近年来发展迅速,几乎在3年之间就抢占了原来vim.sublime text的很多份额,犹记得在2015-2016年的时候,ruby推荐的开发环境基本上都是 ...

  9. C++ 进阶 模板和STL

    C++提高编程 本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用 1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只 ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

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