获取响应文件使用ExtJS

时间:2011-04-22 08:49:22

标签: file extjs response

我使用ExtJS为我的程序构建客户端。有一种情况我想向服务器发送Ajax请求,并获取响应文件(二进制文件,而不是纯文本文件,即XLS或PDF)。如何通过ExtJS获取返回的文件(我的意思是该文件可以下载并存储到客户端)?我无法使用var result = Ext.decode(response.responseText)来接收结果,因为响应包含二进制数据且无法解码。

Ajax调用非常简单:

Ext.Ajax.request({
    url : 'myController/exportFile',
    method : 'GET',
    success : function(response, opts) {
        // What should I do to get the file?
    },
    failure : function(response, opts) {
        alert('Export file failed!')
    }
});

这是我的服务器操作返回文件:

public void sendFile(HttpServletResponse response, String filePath) {
        def file = new File(filePath);
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename=${file.getName()}");     
        response.outputStream << file.newInputStream();
    }

非常感谢你!

2 个答案:

答案 0 :(得分:2)

如果您需要使用典型的浏览器提供的打开/保存对话框提示用户,则无需进行此调用AJAX。

只需从您的网页链接到myController/exportFile即可。例如
<a href="myController/exportFile">my file</a>

要使这种方法起作用,来自myController/exportFile的HTTP响应必须包含相应的标题(即Content-type和Content-disposition),告诉浏览器“这是文件。显示打开/保存对话框”并基于在你的片段上,我看到你已经照顾好了。

答案 1 :(得分:0)

您可以将文件保存到服务器的文件系统,并将window.open('http://your.domain/your/file')发送到客户端... 其中http://your.domain/your/file - 链接到文件