我试图围绕Java Out / Inputstreams,关闭和刷新。我有一种情况,我想使用Apache POI创建一个文件来自服务器的数据。我想从DB中检索第一条记录后立即开始下载文件(显示浏览器底部的文件已开始下载)。
public void createExcelFile(final HttpServletResponse response,
final Long vendorId) {
try {
// setup responses types...
final XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
final XSSFSheet sheet = xssfWorkbook.createSheet("sheets1");
// create file with data
writeExcelOutputData(sheet, xssfWorkbook);
xssfWorkbook.write(response.getOutputStream());
xssfWorkbook.close();
}
catch (final Exception e) {
LOGGER.error("Boom");
}
上面的代码执行文件下载没有问题,但这可能是一个大文件。我开始获取数据(大约20 / 30s)然后开始下载<不好......
我能否实现我所需要的或最好的方法,提前谢谢
干杯:)
答案 0 :(得分:2)
原因可能如下:
您的http服务器可能存在读/写超时,如果该过程变得冗长或因为带宽较低,则服务器将关闭连接。
确保流程(excel工作)完全完成,工作期间可能会出现错误/异常。
Jorge的解决方案看起来很有希望。用户需要一次文件请求,然后服务器将在后台完成工作,然后用户检查工作流程并下载文件(如果准备好),或服务器通过电子邮件,网络通知等通知用户......
此外,您将暂时将文件保留在服务器中的临时文件中,如果连接中断,服务器将响应生成的文件部分(省略发送的字节,如正常文件下载)
保持连接活着做一项冗长的工作并不合逻辑。
同样,如果文件准备好(非常快)下载/流,并且下载中断,则可能是因为服务器读取/写入超时或网络非常糟糕。