Java Servlet下载多个csv文件

时间:2014-07-11 17:25:58

标签: servlets

我有一份报告,在报告中显示一些信息,我在报告中有链接以导出为CSV。要下载csv文件,我们正在做的是,

public class ReportServlet extends XYXServlet{

        public void service(HttpServletRequest req, HttpServletResponse res) throws Exception {
        ...................
        ...................
        res.setContentType("text/csv");
        res.setHeader("Content-Disposition","attachment; filename=\""+reportName+"\"");
        OutputStream out = res.getOutputStream();
        // Render the report
        ReportRender.renderReport(report,results,out,rtParam);
        out.close();

}
}

此报告适用于一名患者。现在我有要求我必须为系统中的所有患者下载报告。我们有超过5000名患者。这是一次性下载。所以基本上每个病人我应该有一个CSV文件.eg文件名将是xyzreport-patientId。我们正在使用速度模板。基本上ReportRender将使用速度模板获取报告结果并与模板合并。像

VelocityContext c = new VelocityContext(params);
    Writer w = new OutputStreamWriter(out);
    template.merge(c,w);
        w.flush();

所以现在我的问题是我如何一次为所有患者下载所有报告。我可以使用一个请求/响应来下载所有患者的报告吗?

1 个答案:

答案 0 :(得分:1)

您可以使用zip文件创建。

Best Practices to Create and Download a huge ZIP (from several BLOBs) in a WebApp

在上面的示例中,他们有BLOB要下载。在您的情况下,您需要在压缩流上写入CSV文件。如果您将一次处理所有内容然后发送它们将导致内存问题。你需要循环;你一看完就开始写。这将提高输出效率,同时避免内存问题。

上面的问题也回答了提出问题的人提交的实施问题。它经过了试验和测试。 :)