java生成动态csv文件供下载

java生成动态csv文件供下载,java,http,Java,Http,我已经编写了一个servlet,它将返回一个csv文件(动态生成)给用户下载。但是,客户端无法看到文件大小,这意味着他们没有收到任何进度指示器 我有这个密码 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { String csv = getCsv(); resp.setContentType(

我已经编写了一个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);
  }
 }

谢谢。

文件大小在
响应头中发送,特别是
内容长度头。您必须在内存或磁盘中构建整个响应,并计算其大小,然后发送具有此大小的
内容长度
标题,以便客户端知道如何计算进度指标。对于某些非标准浏览器(IE),您还必须设置文件的
配置
,以弹出下载文件对话框,并使用进度指示器正确处理响应

尝试使用类似Firefox的浏览器和“Live HTTP Headers”扩展以及“Firebug”来调试实际返回的内容


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

这里的问题到底是什么?我想他希望进度指示器显示文件的大小。您是否在应用压缩(gzip或其他)?OP确实设置了
内容长度
相应的setContentLength(csv.getBytes().Length)这并不意味着它是由浏览器解释的,他们没有正确地提到,这就是为什么我建议用Firefox和Live HTTP Header和Firebug进行调试。