Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get response file use ExtJS

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()}");     
        response.outputStream << file.newInputStream();
    }

Thank you so much!

like image 502
Đinh Hồng Châu Avatar asked Nov 05 '22 23:11

Đinh Hồng Châu


1 Answers

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.

like image 158
Amol Katdare Avatar answered Nov 15 '22 06:11

Amol Katdare