Сервлеты: где хранить загруженные файлы? - PullRequest
1 голос
/ 31 июля 2009

В мире PHP принято создавать каталог с именем 'uploads' или что-то подобное в папке приложения. Все загруженные файлы затем сохраняются там, база данных содержит относительные пути к этим файлам.

Однако в мире Java / сервлетов я не уверен, что является обычным способом обработки загруженных файлов. Получение пути к каталогу внутри каталога приложения может быть затруднено, и весь каталог может быть уничтожен при повторном развертывании файла WAR. В данный момент я храню загруженные файлы в базе данных как большой двоичный объект, но это не мое предпочтительное решение.

Итак, мой вопрос, где мне хранить загруженные файлы?

Ответы [ 5 ]

4 голосов
/ 31 июля 2009

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

1 голос
/ 31 июля 2009

Почему бы не хранить в каталоге вне иерархии .war? Укажите каталог в параметре сервлета (чтобы сделать его настраиваемым) и проверьте / создайте при инициализации сервлета (чтобы вещи не взорвались при первой загрузке файла).

0 голосов
/ 31 июля 2009

Сохраните их в поле большого двоичного объекта в базе данных - любая современная база данных более чем способна справиться с этим.

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

0 голосов
/ 31 июля 2009

как упоминали Брайан и Борис. Почему бы не сохранить загруженный файл за пределами вашего каталога WAR. Почему сложно найти путь за пределами каталога приложения.

0 голосов
/ 31 июля 2009

сделать то же самое; создайте папку загрузки где-нибудь в файловой системе и вставьте туда файлы. Не кладите его в свой веб-контейнер, так как он будет удален, если ваша WAR будет развернута.

...