一 设置消息头
/**
* 设置头信息
*
* @param response
* @param fileName
*/
public static void setResponseHeader(HttpServletRequest request, HttpServletResponse response, String fileName) {
String userAgent = request.getHeader("User-Agent");
// 针对IE或者以IE为内核的浏览器:
try {
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} else {
// 非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=utf-8");
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 客户端不缓存
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
}
二 将workbook封装好调用方法
public static void outputFile(HttpServletRequest request, HttpServletResponse response, Workbook workbook, String fileName) {
setResponseHeader(request, response, fileName);
try {
workbook.write(response.getOutputStream());
} catch (IOException e) {
throw new MessageRuntimeException("下载文件模板异常,写文件流错误!");
}
}