Вывод содержимого PDF-файла, сохраненного как BLOB, с использованием вызова AJAX без создания файла - PullRequest
1 голос
/ 07 марта 2011

Мне нужно открыть файл PDF для пользователя, который нажимает кнопку загрузки.

Кнопка загрузки выполняет ajax-вызов сервлета, который получает данные из поля большого двоичного объекта в базе данных, содержащей содержимое PDF, и возвращает их в качестве ответа.

Что я могу сделать, чтобы пользователь мог загрузить ответ в виде файла PDF.

Код сервлета следующий:

                response.setContentType("application/pdf");
                oracle.sql.BLOB blob = (BLOB) rs.getBlob("MYPDF");
                byte[] bytes = blob.getBytes(1, (int) blob.length());
                ServletOutputStream servletOutputStream = response.getOutputStream();
                servletOutputStream.write(bytes, 0, bytes.length);
                servletOutputStream.flush();
                servletOutputStream.close();

Я получаю длинный ответ, содержащий символы, подобные приведенным ниже, в AJAX, когда проверяю ошибку Fire для ответа.

a J 㔎 ji 2K y 2 q F f 9 G !% kɂ W mp) {h̕SNJ_A'2kjяR> WBE | = сор% wqǦ> ~ 1о㾙 9jB; aNx3`z ط ИСП $; N |; х ۇ; - CFMC (е M6K

Я не хочу отправлять страницу или открывать окно для сервлета с параметрами, отправленными для запроса, отображаемого в URL

Я также не хочу создавать файл на сервере.

Есть ли способ взять ответ сервлета, поступившего при вызове ajax, и отобразить его на странице или в Iframe, и браузер автоматически загрузит файл ...

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Нельзя загрузить файл с помощью Ajax. Тем не менее, тот же «эффект» может быть достигнут с помощью скрытой рамки. Вместо использования XMLHttpRequest динамически создайте скрытый iframe и отправьте его сервлету с правильными параметрами. Когда приходит ответ, браузер автоматически обрабатывает контент на основе типа контента / расширения. Если вы используете jQuery, то этот плагин имеет встроенную функциональность.

0 голосов
/ 07 марта 2011

Похоже, Рахулмохан знает свое дело, но, возможно, стоит попытаться добавить заголовок имени файла в ваш поток ответов. Я делаю что-то похожее в asp.net, но не в среде Ajax, и единственная разница между моим и вашим кодом заключается в следующей строке:

Response.AddHeader ("Content-Disposition", "attachment; filename =" & Filename & ".pdf")

Моя страница не работает в среде Ajax.

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