概述
/**
* @Title:encodeChineseDownloadFileName
* @Description TODO(解决浏览器下载附件乱码问题).
* @date 2016年8月19日
* @author lzqiangPC
* @param pFileName
* @return
* @throws Exception
*/
private static String encodeChineseDownloadFileName( String pFileName) throws Exception {
String filename = null;
String agent = SpringContextUtil.getHttpServletRequest().getHeader("USER-AGENT");
if (null != agent){
if (-1 != agent.indexOf("Firefox")) {//Firefox
filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8"))))+ "?=";
}else if (-1 != agent.indexOf("Chrome")) {//Chrome
filename = new String(pFileName.getBytes(), "ISO8859-1");
} else {//IE7+
filename = java.net.URLEncoder.encode(pFileName, "UTF-8");
filename = StringUtils.replace(filename, "+", "%20");//替换空格
}
} else {
filename = pFileName;
}
return filename;
}
/**
* 附件下载
*
* @param filename
* 文件名
* @param path
* 文件路径
* @param response
*/
public static void download(String filename, String path,
HttpServletResponse response) {
InputStream in = null;
OutputStream os = null;
try {
filename = encodeChineseDownloadFileName(filename);
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename="+filename);
File file = new File(path);
if (file.exists()) {
in = new FileInputStream(path);
os = response.getOutputStream();
byte[] b = new byte[1024 * 1024];
int length;
while ((length = in.read(b)) > 0) {
os.write(b, 0, length);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后
以上就是哭泣大船为你收集整理的解决浏览器下载附件乱码问题 IE11的全部内容,希望文章能够帮你解决解决浏览器下载附件乱码问题 IE11所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复