gpt4 book ai didi

java - 使用 Jersey 输出流流式传输 excel 文件

转载 作者:行者123 更新时间:2023-12-02 11:36:25 26 4
gpt4 key购买 nike

我正在使用 apache-poi 构建一个 excel 文件并通过 Jersey 输出流将其返回给客户端。

代码如下所示:

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();

它适用于最多约 5000 条记录的较小数据集,但是,当我尝试生成包含 20k + 记录(大约 5mb)的文件时,我在 workbook.write(output) 处收到以下错误:

org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse An I/O error has occurred while writing a response message entity to the container output stream. javax.ws.rs.WebApplicationException: HTTP 500 Internal Server Error

Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393)

值得注意的是,无论工作簿大小如何,我都可以使用 FileOutputStream 将文件写入磁盘;

try {
FileOutputStream fos = new FileOutputStream(File);
workbook.write(fos);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

这里有人遇到过 Jersey/apache-poi 的类似问题吗?非常欢迎任何有关修复或合适的解决方法的建议。

最佳答案

您的服务器代码可能没有任何问题,当我看到这一点时,这是客户端由于网络进程中的某个超时而挂起。

Broken Pipe when writing bytes in ServletOutputStream

关于java - 使用 Jersey 输出流流式传输 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48908559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com