设置CROS跨域请求 进行EXCEL模板下载的时候出现了这个错误
前台报错为:
后台报错为:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
具体原因是因为设置过CROS跨域请求信息之后,设置浏览器下载弹出框的时候把请求头信息清除掉了,
response.reset();
把这段代码注释掉就搞定了
具体代码如下
/**
* 设置让浏览器弹出下载对话框的Header.
* 兼容各个浏览器下载
*/
private static <T extends Object> void setDownloadableHeader(HttpServletResponse response,
ExcelConfig<T> manager,
String businessErrMsg) {
try {
String busiSuccess = "true";
if (StringUtil.isEmpty(businessErrMsg)) {
response.setCharacterEncoding("GB2312");
String userAgent = manager.getUserAgent();
String fileName = manager.getFileName() + ".xls";
if (manager.getExcelVersion() == ExcelVersion.EXECL_VERSION_2007)
fileName += "x";
if (userAgent.toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
} else if (userAgent.toUpperCase().indexOf("MSIE") > 0) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else if (userAgent.toUpperCase().indexOf("CHROME") > 0
|| userAgent.toUpperCase().indexOf("SAFARI") > 0) {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
//response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "online; filename=\"" + fileName + "\"");
response.setHeader("Connetion", "close");
} else {
Cookie msgCookie = new Cookie("busiErrMsg",
URLEncoder.encode(businessErrMsg, "utf-8"));
msgCookie.setPath("/");
response.addCookie(msgCookie);
busiSuccess = "false";
}
Cookie fileDownloadCookie = new Cookie("fileDownload", busiSuccess);
fileDownloadCookie.setPath("/");
response.addCookie(fileDownloadCookie);
} catch (Exception e) {
e.printStackTrace();
}
}