Я создаю PDF-файл в веб-приложении Java EE с целью затем связать пользователя с ним. Я понимаю, что доступ к файловой системе из Java EE не рекомендуется из-за возможных проблем с доступностью в распределенных системах и т. Д. Это не должно быть проблемой, так как это всегда будет выполняться на одном сервере. Тем не менее, мне интересно, как лучше всего достичь того, к чему я стремлюсь.Где хранить сгенерированный PDF в Java EE
Мне не нужен файл, чтобы остаться после него, это может быть временный файл или что-то в этом роде. Мне просто нужно знать, что делать с файлом, который я создал.
Я использую PDFBox для создания PDF.
Я пробовал хранить его в файловой системе относительно корня, однако я работаю над окнами с NetBeans, что доказывает проблему. Сервер, конечно, основан на Linux, и я еще не тестировал его. Возможно, он работает на сервере, я просто пытаюсь понять, почему это не будет работать в Windows. Под «не работает» я имею в виду, что, когда я сохранить файл, я использую этот код:
myDocument.save("/var/PDFTEST2.pdf");
и сохраняет файл в C: /var/PDFTEST2.pdf, однако это inacceible от запущенное приложение.
Мои вопросы:
Что такое считается приемлемым способом хранения и представить сгенерированные файлы в приложении Java EE? Если это то, что я делаю (что я сомневаюсь), тогда можно ли заставить это работать в Windows?
Благодарю вас за ваше время.
Я решил это, благодаря предложению потоковой передачи файла на ответ. PDFBox позволяет вам «экономить» непосредственно на выходной поток:
ByteArrayOutputStream output = new ByteArrayOutputStream();
PDDocument myDocument = new PDDocument();
//Populate PDDocument...
myDocument.save(output);
myDocument.close();
response.setContentType("application/pdf");
//response.addHeader("Content-Type", "application/force-download"); //--< Use this if you want the file to download rather than display
response.addHeader("Content-Disposition", "inline; filename=\"yourFile.pdf\"");
response.getOutputStream().write(output.toByteArray());
Работал красиво!
Как долго вы хотите, чтобы файл сохранялся? В течение часа, дня, продолжительности сеанса пользователя? – siledh
@siledh Любой из вышеперечисленных.Они будут использовать и распечатывать файл немедленно, поэтому не нужно, чтобы он сохранялся прошлым при их просмотре (сразу) – MasNotsram
Итак, храните его в памяти в качестве атрибута запроса или сеанса – siledh