2013-09-05 4 views
-2

Generate PDF file in an appropriate format Я спросил здесь, как вызывать PDF-файл для сохранения в его ответе.Сохраните файл PDF, сгенерированный в сервлете, в каталог на компьютере

Теперь я хотел бы сделать сохранение файла в предопределенном каталоге в файловой системе контейнера (скажем, D: \ pdf на окнах). Поэтому, если я правильно понимаю вместо ServletOutputStream, мне нужен FileOutputStream.

Поэтому я думаю, что мне нужно будет обойти запись в ServletOutputStream и использовать File IO. Что вы думаете о моем подходе? Любые советы были бы очень важны!

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

+0

Сервлет может писать в поток; это все, что он может сделать. Сохранение в каталог - это выбор пользователя. – Jayan

+0

Это означает, что хранить в файле в сервлет-коде нельзя? –

ответ

2

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

FileFooStream будет записывать на локальный диск сервера. Он должен работать нормально, если сервер разрешает доступ к файлам (App Engine не работает) и будет писать аналогично настольному приложению.

+0

Я имел в виду локальный диск сервера в моем сообщении. Будет ли редактировать –

+2

. Тогда этот вопрос довольно странный, потому что в сервлет абсолютно не отличается от того, как вы будете делать «обычный» Java-класс. – BalusC

1

Насколько я знаю, вы не можете манипулировать каталогом клиентов через веб-программу. В этом заключается безопасность браузера; кроме того, JVM-песочница не разрешает выполнение апплета с подозрительными действиями.

Другой подход заключается в том, чтобы позволить клиенту решить, что делать с pdf-файлом. Для этого вы можете использовать нижеследующий шаг:

  1. Используйте Mime в заголовке ответа, чтобы сообщить браузеру, что вы собираетесь писать PDF-файл в выходном потоке.
  2. Браузер принимает ваш байт и пытается отобразить его с помощью плагина, такого как Adobe PDF reader (встроенный в браузер).
  3. Если у браузера есть плагин, он позволит пользователю решить, что делать с этим файлом (сохранить/открыть приглашение).
  4. Тогда пользователь мог бы решить, как открыть PDF-файл.

Вы можете получить ключ от this post о том, как это сделать.

1

Заглянув в вопрос, я думаю, вы немного смущены тем, как работает сервлет.

См. Сервлет - это класс Java, который выполняется на JVM со стороны сервера. То, что вы получаете от запроса, и то, что вы установите в Response, - это способ общения с базовым HTTP-сервером, который, наконец, будет использовать атрибуты из вашего запроса и ответа для генерации текста, который он может передать в клиентский браузер.

Таким образом, поток ввода/вывода файлов, который вы создадите в сервлете, даст вам доступ к каталогу машины, на которой выполняется этот сервлет. И здесь он будет выполнен на вашем сервере. Так что в лучшем случае вы можете cantrol, где входящий файл должен быть сохранен на сервере, используя поток ввода/вывода файлов, но вы не можете получить доступ к каталогу клиентского компьютера с помощью Servlet.

P.S. Я не рассматривал возможность отправки апплета в браузер.

Смежные вопросы