开发者

Get response file use ExtJS

开发者 https://www.devze.com 2023-02-27 18:09 出处:网络
I use ExtJS to build the client-side for my program. There\'s a situation that I want to send an Ajax request to server, and get the response file (binary file, not plain text file, i.e XLS or PDF). H

I use ExtJS to build the client-side for my program. There's a situation that I want to send an Ajax request to server, and get the response file (binary file, not plain text file, i.e XLS or PDF). How can I get that returned file by ExtJS (I mean that file can be downloaded and stored to client)? I cannot use var result = Ext.decode(response.responseText) to receive the result because reponse contains binary data and it cannot be decoded.

The Ajax call is very simple :

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!')
    }
});

Here is my server action to return file:

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()}");     
      开发者_StackOverflow中文版  response.outputStream << file.newInputStream();
    }

Thank you so much!


If you need the user to be prompted with the typical browser provided open/save dialog box, you don't need to make this call AJAX.

Just linking to myController/exportFile from your page should be enough.
e.g. <a href="myController/exportFile">my file</a>

For this approach to work, HTTP response from myController/exportFile must include the appropriate headers (namely, Content-type and Content-disposition) that tell the browser "this is file. show open/save dialog" and based on your snippet, I see that you already have this taken care of.


You can save your file to server's file-system and send window.open('http://your.domain/your/file') to client side... where http://your.domain/your/file -link to file

0

精彩评论

暂无评论...
验证码 换一张
取 消