0

我正在服务器端生成 excel 文件,并使用以下响应标头将其写入输出流。

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);

在我的客户端:对 servlet 的 ajax 调用,如图所示:

Ext.Ajax.request({
            url: 'GenerateReport',
            method: 'GET',
            params: {
                'start_date': sd.getValue(),
                'end_date':ed.getValue()
            }
 });

浏览器显示以下响应标头在此处输入图像描述

我的问题:打开并保存对话框提示未打开。可能是什么问题。请帮我解决这个问题。感谢任何帮助。谢谢。

4

3 回答 3

1

尝试使用适当的 URL 而不是 AJAX 请求打开新窗口。

于 2013-09-04T10:08:54.933 回答
0

谢谢@liya。我已经通过使用 iframe 而不是 ajax 调用解决了它。它被直接下载。这里是:

Ext.core.DomHelper.append(document.body, {
            tag : 'iframe',
            id : 'downloadIframe',
            frameBorder : 0,
            width : 0,
            height : 0,
            css : 'display:none;visibility:hidden;height:0px;',
            src : 'GenerateReport'
   });

但是无论如何,在下载之前打开一个对话框,提示“打开”或“保存”文件,而不是直接保存我正在做的事情。

于 2013-09-04T10:15:23.247 回答
0

为确保浏览器会提示Openor Save,您必须发送二进制内容类型。否则,浏览器会尝试使用关联的应用程序打开下载的文件。某些浏览器(较旧的 IE ie)可能仍会从文件扩展名中推断出关联的应用程序。

response.setContentType("application/octet-stream");

于 2013-09-05T10:48:17.207 回答