2010-11-30 69 views
0

我已经编写了一个servlet,它将一个csv文件(动态生成)返回给用户下载。但客户端无法看到文件大小,这意味着它们不会收到进度指示符。java生成动态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); 
    } 
} 

谢谢。

+0

这里的问题究竟是什么? – ColinD 2010-11-30 20:29:15

+1

我假设他希望进度指示器显示文件的大小。 – tHeSiD 2010-11-30 20:42:33

回答

1

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

尝试使用Firefox等浏览器和'Live HTTP Headers'扩展名和'Firebug'来调试实际发回的内容。

你不说什么浏览器不工作,所以它可能是浏览器特定的,需要额外的浏览器特定的元数据。