Как просмотреть файл на сервере в JBoss - PullRequest
0 голосов
/ 06 января 2009

Мне нужны идеи о том, как лучше всего решить эту проблему.

У меня есть приложение JBoss Seam, работающее на JBoss 4.3.3 Небольшая часть этого приложения генерирует HTML и PDF-документ на основе шаблона Open Office.

Файлы, которые генерируются, я помещаю в / tmp / в файловой системе. Я пытался с System.getProperties ("tmp.dir") и некоторыми другими параметрами, и они всегда возвращают $ JBOSS_HOME / bin Я хотел бы выбрать путь $ JBOSS_HOME / $ DEPLOY / myEAR.ear / myWAR.war / WheverLocationHere /

Тем не менее, я не знаю, как я могу программно выбрать путь без указания абсолютного пути или установки $ JBOSS_HOME и $ DEPLOY.

Anybody know how I can do this?

Второй вопрос; Я хочу легко просмотреть эти сгенерированные файлы. Либо с помощью JavaScript, либо как-то проще. Однако JavaScript не может получить доступ к файловой системе на сервере, поэтому я не могу открыть файл через JavaScript.

Any easy solutions out there?

Ответы [ 5 ]

1 голос
/ 09 января 2009

Не уверен, как вы генерируете свои PDF-файлы, но, если возможно, пропустите дисковый ввод-вывод все вместе, сохраните содержимое PDF в byte[] и сбросьте его пользователю в сервлете, установив тип mime на application/pdf * который отвечает на URL, который указывается ссылкой в ​​вашем клиенте или динамически устанавливается в <div> с помощью javascript. Вы, вероятно, в любом случае получаете удар по памяти, и в дополнение к пропуску ввода-вывода вам не нужно беспокоиться об удалении файлов tmp, когда вы закончите с предварительным просмотром.

***** Я думаю, что это правильно. Нужно посмотреть.

1 голос
/ 07 января 2009
  1. Я согласен с Питером (ты, Пит!). Поместите каталог за пределы вашей WAR и установите переменную среды, указывающую на это. Прочитайте этот пост Джейкоба Оршалика о том, как настроить переменные среды в Seam:

  2. Что касается предварительного просмотра PDF, посмотрите, как Google Docs обрабатывает предварительный просмотр PDF - он отображает их в виде изображения. Чтобы сделать это с Java, посмотрите Sun PDF Renderer .

1 голос
/ 06 января 2009

Не уверен, что у меня есть полное представление о том, чего вы пытаетесь достичь, но я все равно попробую:

Я предполагаю, что ваша конечная цель - сделать некоторые файлы (PDF, HTML) доступными для конечных пользователей через веб-приложение.

В таком случае, почему бы Apache не передавать эти файлы конечным пользователям, поэтому вам нужно, чтобы ваше приложение JBOSS знало путь к каталогу, который сопоставлен с виртуальным хостом Apache.

Итак, создайте файл и сохраните его как /var/www/html/myappfiles/tempfile.pdf (папка, известная вашему приложению), а затем предоставьте http://mydomain.com/myappfiles (виртуальный хост Apache) вашему пользователи. Остальное будет делать веб-сервер.

Вам потребуется установить переменную окружения или системное свойство, чтобы приложение узнало, где находится ваша папка (в этом примере / var / www / html / myappfiles /).

Надеюсь, я не был далеко:)

0 голосов
/ 10 января 2009
  • Во-первых, большинство платформ используют java.io.tmpdir для установки временного каталога. Некоторые контейнеры сервлетов переопределяют это свойство как нечто под своим деревом. Почему вас волнует, куда записывается файл?
  • Во-вторых, я согласен с Николасом: после создания PDF на стороне сервера вы можете создать URL, который при нажатии отправляет файл в браузер. Если вы используете MIME типа application/pdf, браузер должен правильно с ним работать.
0 голосов
/ 06 января 2009

Я не уверен, что это работает в JBoss, учитывая, что вам нужен путь внутри архива WAR, но вы можете попробовать использовать ServletContext.getRealPath (String) .

Однако я лично не хотел бы, чтобы сгенерированные файлы были внутри моего развернутого приложения; вместо этого я бы настроил внешний каталог данных где-то вроде $JBOSS_HOME/server/default/data/myapp

...