我正在尝试从servlet响应中下载excel表。
当我点击向服务器发送请求以返回Excel工作表的链接时,保存/另存为对话框,要求保存Excel工作表。这是预期的行为。
但介于两者之间,如果我尝试使用IE 6或更低版本,则点击链接后会打开新窗口。然后打开“保存/另存为”对话框。
其他操作按预期运行,但问题是,新窗口显示消息无法打开页面。
有什么办法,我可以避免打开这个新窗口吗?
我希望“保存/另存为”对话框直接出现在单击链接的同一窗口中。
答案 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错误。