代码之家  ›  专栏  ›  技术社区  ›  Karthik

如何一次导出/生成两个文件?

  •  3
  • Karthik  · 技术社区  · 14 年前

    我需要同时生成两个excel文件。我们使用apachepoi生成excel文件和struts框架。

    OutputStream outputStream = response.getOutputStream();
    

    然后从数据库中填充数据,并使用POI创建一个文件,

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition",
                     "attachment; filename=ExportFile1.xls");
    workbook.write(outputStream);
    outputStream.flush();
    

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition",
                     "attachment; filename=ExportFile2.xls");
    workbook.write(outputStream);
    outputStream.flush();
    

    但只生成一个文件。

    请注意:不需要在一个excel文件中生成两张表格。

    4 回复  |  直到 14 年前
        1
  •  5
  •   A. Ionescu    14 年前

    我需要同时生成两个excel文件。

    1. 如果用户仍然需要“只需单击一次”就可以得到,那么压缩所有文件是标准的过程。为了获得更高的可用性,可以将其与场景1中的屏幕或弹出窗口相结合/改进:例如,显示一个列表,其中包含每个文件的复选框,并在底部提供一个链接,以“将所有内容作为zip文件获取”。这样,用户可以单独下载文件,但也可以只选择感兴趣的文件,或者只获取所有文件。

    这是大多数webapp的工作方式,因为它是用户最友好的。

        2
  •  1
  •   Stephen C    14 年前

    为了发送两个不同的excel文件,您需要使用浏览器知道如何取消拾取的模式对它们进行编码。一种方法是使用“多部分”内容类型发送响应,如中所述 RFC1341 section 7.2

    另一种方法是将两个(或更多)文件编码为ZIP存档。Java类库中有一些类用于以编程方式创建ZIP存档。

        3
  •  0
  •   Brian S    14 年前

    OutputStream 以写入两个文件。

    使用您提供的代码,看起来您所做的只是将文件的头从“ExportFile1.xls”更改为“ExportFile2.xls”,然后将文件内容(头声明获取file2)写入流。我想第二个流也需要第二个resonse对象。

        4
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

    你只能发回一个文件。