工具类-解决不同种类浏览器 下载弹出框中中文内容 无法正常显示的问题;

声明:

该工具时对网上下载的工具类进行了一个改写, 感谢原作者(不好意思,找不到原作者的名称和地址);

修改时参考了下记博客, 感谢这个博主:
参考的博客地址: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; } }
posted @ 2021-06-13 20:38  小人物_大情怀  阅读(261)  评论(0)    收藏  举报