【问题标题】:downloading excel sheet from servlet response从 servlet 响应下载 excel 表
【发布时间】:2010-09-02 14:28:35
【问题描述】:

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

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

但在这两者之间,如果我尝试使用 IE 6 或以下版本,则单击链接后会打开新窗口。然后打开保存/另存为对话框。

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

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

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

【问题讨论】:

    标签: java servlets


    【解决方案1】:

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

    HttpServletResponse 资源 = ... /* * 设置标题 */ res.setContentType("application/vnd.ms-excel"); res.setHeader("Content-Disposition", "attached; filename=my-workbook.xls"); /* * 将下载传递给响应 */ 尝试 { 输出流输出 = res.getOutputStream(); InputStream in = this.download.getInputStream(); 字节[] 缓冲区 = 新字节[res.getBufferSize()]; int 可用 = in.read(buffer); 而(可用> 0){ out.write(缓冲区,0,可用); 可用 = in.read(buffer); } 附寄(); out.flush(); out.close(); } 捕捉(IOException e){ // 处理异常 }

    【讨论】:

      【解决方案2】:

      我已经看到新窗口打开了很多次,但里面从来没有错误。

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

      虽然我之前曾看到 IE 在 IFrame 中做一些奇怪的事情并出现错误(偶尔会出现帧中断),但我认为这仅与非标准协议处理程序有关,与 HTTP 错误无关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 2012-10-30
        • 2017-08-05
        • 2021-10-02
        相关资源
        最近更新 更多