我使用apache-poi构建一个excel文件并通过Jersey输出流将其返回给客户端。
代码如下所示:
-A IN_public_allow -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT`
对于最小约5000条记录的较小数据集,它可以正常工作,但是,当我尝试生成具有20k +记录(大约5mb)的文件时,我在workbook.write(输出)处得到以下错误:
org.glassfish.jersey.server.ServerRuntime $ Responder.writeResponse An 写入响应消息实体时发生I / O错误 容器输出流。 javax.ws.rs.WebApplicationException:HTTP 500内部服务器错误
引起:org.apache.catalina.connector.ClientAbortException: java.io.IOException:已建立的连接被中止 主机上的软件 org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393)
值得注意的是,无论工作簿大小如何,我都可以使用FileOutputStream将文件写入磁盘;
final SXSSFWorkbook workbook = ExcelFormatter.buildWorkbook();
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
try {
workbook.write(output);
workbook.close();
workbook.dispose();
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
};
return Response.ok(stream).header("content-disposition","attachment; filename = export.xlsx").type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet").build();
有没有人在这里遇到类似泽西/阿帕奇的问题?对修复或合适的解决方法的任何建议都非常欢迎。
答案 0 :(得分:1)
您的服务器代码可能没有任何问题,当我看到它时,由于网络进程中某处的超时而导致客户端挂断。
答案 1 :(得分:0)
我将我的apache-poi jar升级到3.8,这似乎解决了问题