Получить файл ответа использовать ExtJS - PullRequest
5 голосов
/ 22 апреля 2011

Я использую 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!')
    }
});

Вот мое действие сервера для возврата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();
    }

Спасибо большое!

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Если вам нужно, чтобы пользователь получал запрос в стандартном диалоговом окне открытия / сохранения с помощью браузера, вам не нужно делать этот вызов AJAX.

Достаточно просто ссылки на myController/exportFile со своей страницы.
например, <a href="myController/exportFile">my file</a>

Чтобы этот подход работал, HTTP-ответ от myController/exportFile должен включать соответствующие заголовки (а именно, Content-type и Content-disposition), которые сообщают браузеру «это файл. Показать диалог открытия / сохранения» и основаны на вашем фрагмент, я вижу, что вы уже позаботились об этом.

0 голосов
/ 22 апреля 2011

Вы можете сохранить свой файл в файловой системе сервера и отправить window.open ('http://your.domain/your/file') на стороне клиента ... где http://your.domain/your/file - ссылка на файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...