
在下载文件的时候不同的浏览器可能会造成中文乱码,java可以根据浏览器的类型做出判断
package com.dzqc.yx.util;
import javax.servlet.http.HttpServletRequest;
/***
* 判断浏览器类型
*/
public class BrowsersType {
public static boolean isMSBrowser(HttpServletRequest request) {
String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
String userAgent = request.getHeader("User-Agent");
for (String signal : IEBrowserSignals) {
if (userAgent.contains(signal)){
return true;
}
}
return false;
}
/**
* @return boolean true:Chrom或者Firefox false:其他
* @author
*/
public boolean getBrowserType() {
String browser = "";
browser = ServletActionContext.getRequest().getHeader( "USER-AGENT" );
if (browser.indexOf( "Chrome" ) > 0 || browser.indexOf( "Firefox") > 0) {
return true;
} else {
return false;
}
}
}
{"MSIE", "Trident", "Edge"}//都是ie浏览器的类型
Chrome、Firefox:谷歌和火狐
下载工具类
package com.dzqc.yx.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/***
* 下载工具类
* @author JIAJIAJIA
*
*/
public class DownloadUtil {
/***
*
* @param file File
* @param resName 返回的文件名称
* @param response HttpServletResponse
* @param request HttpServletRequest
*/
public void download(File file,String resName,HttpServletResponse response,HttpServletRequest request) {
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(response.getOutputStream());
response.setContentType(new MimetypesFileTypeMap().getContentType(file));// 设置response内容的类型
String filename=resName;
if (BrowsersType.isMSBrowser(request)) {//查看浏览器类型
filename = URLEncoder.encode(filename, "UTF-8");
} else {
filename = new String(filename.getBytes("utf-8"), "ISO8859-1");
}
response.setHeader("Content-disposition", "attachment;filename=" + filename);// 设置头部信息
byte[] buffer = new byte[1024];
int length = 0;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* @param path 文件路径 约定-路径类似与 e:/test/photo/
* @param fileName 文件名
* @param resName 返回文件的名称
* @param response HttpServletResponse
* @param request HttpServletRequest
*/
public void download(String path,String fileName,String resName,HttpServletResponse response,HttpServletRequest request) {
File file = new File(path+fileName);
download(file, resName, response, request);
}
}
就是在这使用
if (BrowsersType.isMSBrowser(request)) {//查看浏览器类型
filename = URLEncoder.encode(filename, "UTF-8");
} else {
filename = new String(filename.getBytes("utf-8"), "ISO8859-1");
}