我编写了一个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);
}
}
谢谢。
答案 0 :(得分:1)
Filesize以Response Header
发送,特别是Content-Length
标头。您必须在内存或磁盘上构建整个响应并计算其大小并发送具有此大小的Content-Length
标头,以便客户端知道如何计算进度指示器。您还有一些非标准浏览器(IE)必须设置文件的Disposition
以使弹出的“下载文件”对话框正确并使用进度指示器处理响应。
尝试使用像Firefox这样的浏览器和“Live HTTP Headers”扩展程序以及“Firebug”来调试实际发回的内容。
您没有说明哪些浏览器不起作用,因此它可能是特定于浏览器的,并且需要其他特定于浏览器的元数据。