import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* @Auther: wuwenlong
* @Date: 2018/6/2 0002 17:24
* @Description:
*/
public class ExcelUtil {
/**
* 将文件名转译成不同浏览器能识别的字符编码
* @param request
* @param filename
* @return
*/
public static String getFileName(HttpServletRequest request, String filename) {
String userAgent = request.getHeader("user-agent");
String new_filename, rtn = "filename=\"" + filename + "\"";
try {
new_filename = URLEncoder.encode(filename, "UTF8");
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
rtn = "filename=\"" + new_filename + "\"";
if (userAgent != null) {
userAgent = userAgent.toLowerCase();
// IE浏览器,只能采用URLEncoder编码
if (userAgent.indexOf("msie") != -1) {
rtn = "filename=\"" + new_filename + "\"";
}
// Opera浏览器只能采用filename*
else if (userAgent.indexOf("opera") != -1) {
rtn = "filename*=UTF-8''" + new_filename;
}
// Safari浏览器,只能采用ISO编码的中文输出
else if (userAgent.indexOf("safari") != -1) {
rtn = "filename=\"" + new String(filename.getBytes("UTF-8"), "ISO8859-1") + "\"";
}
// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
else if (userAgent.indexOf("applewebkit") != -1) {
//new_filename= MimeUtility.encodeText(filename,"UTF-8","B");
//rtn = "filename=\"" + new_filename + "\"";
rtn = "filename=\"" + new String(filename.getBytes("UTF-8"), "ISO8859-1") + "\"";
}
// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
else if (userAgent.indexOf("mozilla") != -1) {
rtn = "filename*=UTF-8''" + new_filename;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return rtn;
}
}
/**
* 文件下载
*
* @param request
* @param response
* @param fileName
*/
private void setResponseHeader(HttpServletRequest request, HttpServletResponse response, String fileName) {
try {
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel"); // 保存为excel
response.setHeader("Content-Disposition", "attachment;" + ExcelUtil.getFileName(request, fileName));
} catch (Exception ex) {
ex.printStackTrace();
}
}