Tomcat文件下载挂起在IE中
我正在尝试从Tomcat7服务器下载Excel文件。直到两周前,一切都很顺利。当时,下载开始挂在IE(IE11)上。该下载在Chrome中也能正常工作,现在仍能正常工作。超时后,我得到以下异常:Tomcat文件下载挂起在IE中,tomcat,servlets,download,Tomcat,Servlets,Download,我正在尝试从Tomcat7服务器下载Excel文件。直到两周前,一切都很顺利。当时,下载开始挂在IE(IE11)上。该下载在Chrome中也能正常工作,现在仍能正常工作。超时后,我得到以下异常: ClientAbortException: java.io.IOException at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:371) at org.apache.catalina.c
ClientAbortException: java.io.IOException
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:371)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:333)
at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:101)
at com.firstmanhattan.admin.model.PoiSpreadSheet.sendFile(PoiSpreadSheet.java:179)
at com.firstmanhattan.admin.actions.BondDurationAction.perform(BondDurationAction.java:200)
at com.firstmanhattan.servlet.FMCController.doPost(FMCController.java:147)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException
at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:205)
at org.apache.coyote.http11.InternalAprOutputBuffer.flush(InternalAprOutputBuffer.java:109)
at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:805)
at org.apache.coyote.Response.action(Response.java:174)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:366)
... 24 more
代码如下:
public void sendFile(HttpServletResponse response) {
try {
String fullname = "d:\\Temp\\myfile.xls";
response.reset();
// tried both of the following lines - no difference.
// response.setContentType("application/vnd.ms-excel");
response.setContentType("application/msexcel");
response.setHeader("Content-Disposition", "attachment; filename="+filename);
System.out.println("length = " + length); // Displays 108544
response.setContentLength((int)length);
response.flushBuffer();
ServletOutputStream o = response.getOutputStream();
FileInputStream inStream = new FileInputStream(fullname);
int read = -1;
byte[] bytes = new byte[4096];
while((read = inStream.read(bytes)) != -1) {
System.out.println("read = " + read);
o.write(bytes, 0, read);
o.flush(); // tried with and without this
}
System.out.println("Done");
inStream.close();
System.out.println("Stream closed");
if (o != null) {
o.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
在Chrome上,写入循环打印26次4096字节的读取,以及2048次读取中的一次(总计108544次,正确的文件大小)。在IE上,循环打印9次4096字节的读取,然后挂起。它最终会抛出上述异常超时
有什么想法吗