2010-09-02 101 views
0

我想从servlet响应中下载一个excel表格。从servlet响应中下载Excel表格

当我点击链接发送请求到服务器返回一个Excel工作表,保存/保存为对话框打开要求保存Excel表。这是一个预期的行为。

但是在两者之间,如果我尝试使用IE 6或更低版本,那么点击链接后会打开一个新窗口。然后打开Save/Save As对话框。

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

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

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

回答

0

我已经看到新窗口打开了很多次,但从来没有在它内部的错误。

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

尽管我已经看到IE在iframe中出现错误(它会偶尔会出现framebust),但我认为这只是与非标准协议处理程序有关,而不是HTTP错误。

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 
}