Форма сетки ExtJS с документом в MySQL - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть сетка с данными, поступающими из базы данных. Каждая строка таблицы содержит следующие поля: имя документа, владелец, версия и т. Д. Содержимое документа находится в BLOB-объекте.

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

Я могу прочитать содержимое документа с помощью ajax-запроса и поместить результат в переменную.

                            Ext.Ajax.request({
                            url: '../controleurs/c_get_doc_content.php',
                            method: 'POST',
                            params: { dep: r.data.nom_document },
                            success: function(response, opts) {console.log(response);console.log(opts)},
                            requestcomplete: function (conn, response, options) {},
                            failure: function() {console.log('failure');},
                            headers: { 'my-header': 'foo' },

Как сохранить содержимое документа в файл на компьютере пользователя?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Лучшее решение для этого - на стороне сервера.Вместо того, чтобы передавать большой двоичный объект в JS, вы просто передаете идентификатор.Затем, когда пользователь решает загрузить файл, вы вызываете сервер, и он возвращает документ, который можно загрузить.

Вы бы просто передавали этот контент в виде вложения, а не отправляли его с запросом AJAX

в PHP вы используете следующий код, чтобы убедиться, что файл загружен и отображается диалоговое окно сохранения как.

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
0 голосов
/ 27 апреля 2011

Задайте тип содержимого вашего ответа PHP для того, что браузер захочет сохранить ....

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