我有一份报告,在报告中显示一些信息,我在报告中有链接以导出为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();
所以现在我的问题是我如何一次为所有患者下载所有报告。我可以使用一个请求/响应来下载所有患者的报告吗?
答案 0 :(得分:1)
您可以使用zip文件创建。
Best Practices to Create and Download a huge ZIP (from several BLOBs) in a WebApp
在上面的示例中,他们有BLOB要下载。在您的情况下,您需要在压缩流上写入CSV文件。如果您将一次处理所有内容然后发送它们将导致内存问题。你需要循环;你一看完就开始写。这将提高输出效率,同时避免内存问题。
上面的问题也回答了提出问题的人提交的实施问题。它经过了试验和测试。 :)