java生成动态csv文件供下载

时间:2010-11-30 20:22:28

标签: java http

我编写了一个servlet,它将csv文件(动态生成)返回给用户下载。但是,客户端无法查看文件大小,这意味着他们没有收到进度指示器。

我有这段代码

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  try {
   String csv = getCsv();

   resp.setContentType("text/csv");
   resp.setContentLength(csv.getBytes().length);
   resp.getWriter().write(csv);
  } catch (Exception e) {
   log.error("error generating feed", e);
  }
 }
谢谢。

1 个答案:

答案 0 :(得分:1)

Filesize以Response Header发送,特别是Content-Length标头。您必须在内存或磁盘上构建整个响应并计算其大小并发送具有此大小的Content-Length标头,以便客户端知道如何计算进度指示器。您还有一些非标准浏览器(IE)必须设置文件的Disposition以使弹出的“下载文件”对话框正确并使用进度指示器处理响应。

尝试使用像Firefox这样的浏览器和“Live HTTP Headers”扩展程序以及“Firebug”来调试实际发回的内容。

您没有说明哪些浏览器不起作用,因此它可能是特定于浏览器的,并且需要其他特定于浏览器的元数据。