Я работаю над приложением, работающим на JBoss5.1, JEE5, JSF2, Spring3.0, Icefaces2.0, HTML и Jquery1.8.
У меня есть требование генерации файлов «на лету» для загрузки клиентов. Когда создается файл, в настоящее время я передаю содержимое файла в виде байтов на страницу JSF и используя <ice:outputResource>
, чтобы показать ссылку для загрузки. Это отлично подходит для файлов меньшего размера. По мере увеличения размера файла это не является хорошим решением, так как я столкнулся с проблемами OutOfMemoryError
, потому что приложение JVM должно нести нагрузку на перенос содержимого файла в кучу, а затем воронку через приложение.
Что я хотел бы сделать, так это предоставить сгенерированные файлы в виде прямых ссылок, чтобы они могли обслуживаться сетью, содержащейся в HTTP. У меня есть ограничение сделать это в безопасной среде, чтобы пользователь был аутентифицирован, прежде чем он сможет создать и увидеть ссылку. Таким образом, я планирую сгенерировать файл в каталог WEB-INF и удалить файл, как только пользователь загрузит, что фактически делает WEB-INF содержащим только файлы, которые в настоящее время просматриваются клиентами. Я не уверен , как сервер JBoss обрабатывает эти файлы с точки зрения кеширования и влияет на производительность сервера. Кроме того, я ценю, есть ли альтернативные подходы к моей проблеме.Эффективный способ публикации сгенерированных файлов на сервере?
Я считаю, что я четко описал свою проблему, если не сообщите мне. Заранее благодарим за ваше время и помощь.
PS - Я даже могу создавать файлы за пределами WEB-INF и все еще сделать их безопасными.
вы не должны генерировать файлы в WEB-INF, вы должны использовать системный каталог temp (или какой-либо настроенный рабочий каталог для вашего приложения). – jtahlborn
В зависимости от того, как вы создаете файлы, вам даже не нужны временные файлы, вы можете передать их прямо клиенту. – jtahlborn
@jtahlborn Спасибо, да, все в порядке. Я даже могу создать вне WEB-INF и все еще сделать их безопасными. Я создаю файлы в CSV, PDF и XLS, используя Java FileOutputStream. Когда вы говорите поток прямо к клиенту, можете ли вы подробно рассказать? – IndoKnight