从servlet响应中下载excel表

时间:2010-09-02 14:28:36

标签: java servlets

我正在尝试从servlet响应中下载excel表。

当我点击向服务器发送请求以返回Excel工作表的链接时,保存/另存为对话框,要求保存Excel工作表。这是预期的行为。

但介于两者之间,如果我尝试使用IE 6或更低版本,则点击链接后会打开新窗口。然后打开“保存/另存为”对话框。

其他操作按预期运行,但问题是,新窗口显示消息无法打开页面。

有什么办法,我可以避免打开这个新窗口吗?

我希望“保存/另存为”对话框直接出现在单击链接的同一窗口中。

2 个答案:

答案 0 :(得分:1)

如果您想从servlet(或实际上任何Web应用程序)发送一个应被视为下载的响应,您可以通过提供正确的内容处理(您甚至可以指定独立于URI):

HttpServletResponse res = ...
/*
 * set headers
 */
res.setContentType("application/vnd.ms-excel");
res.setHeader("Content-Disposition", "attached; filename=my-workbook.xls");
/*
* pass the download to the response
*/
try {
    OutputStream out = res.getOutputStream();
    InputStream in = this.download.getInputStream();
    byte[] buffer = new byte[res.getBufferSize()];
    int available = in.read(buffer);
    while (available > 0) {
        out.write(buffer, 0, available);
        available = in.read(buffer);
    }
    in.close();
    out.flush();
    out.close();
} catch (IOException e) {
    // handle exception
}

答案 1 :(得分:0)

我看到新窗口打开了很多次,但从来没有出现过错误。

尝试在IFrame中启动下载。如果下载本身仍然触发可能有助于隐藏错误消息。最好弄清楚错误显示的原因并将其停止,但如果失败,您至少可以将其隐藏起来。

虽然我已经看到IE在IFrames之前做了一些奇怪的事情(它偶尔会出现问题),但我认为这只与非标准协议处理程序有关,而不是HTTP错误。