Java输出流,在从db

时间:2017-04-15 19:29:12

标签: java apache-poi inputstream httpresponse fileoutputstream

我试图围绕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)然后开始下载<不好......

我能否实现我所需要的或最好的方法,提前谢谢

干杯:)

1 个答案:

答案 0 :(得分:2)

原因可能如下:

  1. 您的http服务器可能存在读/写超时,如果该过程变得冗长或因为带宽较低,则服务器将关闭连接。

  2. 确保流程(excel工作)完全完成,工作期间可能会出现错误/异常。

  3. Jorge的解决方案看起来很有希望。用户需要一次文件请求,然后服务器将在后台完成工作,然后用户检查工作流程并下载文件(如果准备好),或服务器通过电子邮件,网络通知等通知用户......

    此外,您将暂时将文件保留在服务器中的临时文件中,如果连接中断,服务器将响应生成的文件部分(省略发送的字节,如正常文件下载)

    保持连接活着做一项冗长的工作并不合逻辑。

    同样,如果文件准备好(非常快)下载/流,并且下载中断,则可能是因为服务器读取/写入超时或网络非常糟糕。