gpt4 book ai didi

Java Apache POI : Writing Workbook to ServletOutputStream hangs until button clicked in client browser

转载 作者:行者123 更新时间:2023-12-04 06:00:23 24 4
gpt4 key购买 nike

此代码创建一个工作簿并将其发送到客户端浏览器。几乎没问题,响应被发送回浏览器,浏览器中会打开一个漂亮的弹出窗口,要求保存、打开文件或取消整个操作。经典的。

问题是,如果我调试这段代码,有时 , 和 仅适用于 IE , java 机器会卡在 wb.write(out) 线上; (但我仍然有我的 excel 文件发送给客户端,我可以下载它,没关系)。

问题是我想在这行之后放一些代码,所以有时它没有被执行。

任何线索?

public static void export(List<ExportSheetData> exportSheetsData, String fileName) throws IOException {

FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext()
.getResponse();
response.setContentType("application/vnd.ms-excel");
String headerResponse = "attachment;filename=";
headerResponse = headerResponse.concat(fileName);
response.addHeader("Content-disposition", headerResponse);
ServletOutputStream out = response.getOutputStream();

Workbook wb = new XSSFWorkbook();
for (ExportSheetData exportSheetData : exportSheetsData) {
Sheet sheet = wb.createSheet(exportSheetData.getTitle());
// creating workbook here...
}

wb.write(out); // JVM sometimes get stucked here
out.flush();
out.close();
context.responseComplete();

}

最佳答案

JVM 在这里停止,因为没有从另一端的流中读取任何内容。下一行将在整个文件下载后执行。 Firefox、Opera 和 Chrome 在您点击“保存”之前开始下载。当您单击“取消”时 - 文件被删除。 IE 等待您的点击下载。

我曾经遇到过类似的问题,我创建了另一个正在写入流的线程,而该线程正在做其他事情。

您还可以尝试将输出流包装到 BufferedOutputStream 中。如果文件足够小并且适合缓冲区,它应该可以工作。

关于Java Apache POI : Writing Workbook to ServletOutputStream hangs until button clicked in client browser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983911/

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