工具类-解决不同种类浏览器 下载弹出框中中文内容 无法正常显示的问题;
声明:
该工具时对网上下载的工具类进行了一个改写, 感谢原作者(不好意思,找不到原作者的名称和地址);
修改时参考了下记博客, 感谢这个博主:
参考的博客地址:http://www.cnblogs.com/wsygdb/p/7890237.html*/
工具使用背景:
当页面中有弹出式的下载链接时,需要使用Servlet的response对象去调用setHeader()方法,将content-disposition这个响应头的值设定为 attachment;filename=***;
例:
response.setHeader("content-disposition","attachment;filename=" + filename);
这个filename会在弹出的下载弹出窗中显示出来, 如果这个filename包含中文,使用浏览器进行下载的时候可能会出现字符不能识别的情况;
使用下边这个工具类,来解决这个问题;
解决步骤:
1. 在servlet的实现类中获取浏览器请求数据中的请求头(user-agent);
String agent = request.getHeader("user-agent");
2. 调用下边这个工具类的静态方法getFileName, 得到一个新的filename, 这里命名为filename1;
String filename1 = DownLoadUtils.getFileName(agent, filename);
3. 在设置响应头content-diposition时,将filename1拼接到”filename=“ 后;
response.setHeader("content-disposition","attachment;filename="+filename1);
工具类代码:
JDK版本: jdk1.8;
package cn.itcast.web.utils; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Base64; import java.util.Base64.Encoder;
public class DownLoadUtils { public static String getFileName(String agent, String filename) throws UnsupportedEncodingException { if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 Encoder encoder = Base64.getEncoder(); filename = "=?utf-8?B?" + encoder.encodeToString(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }

浙公网安备 33010602011771号