2009-07-31 3 views
1

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

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

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

+0

Почему вы не выбрали правильное решение? –

+1

Поскольку размещение файлов в базе данных просто потребляет ресурс базы данных, когда они могут просто сидеть в файловой системе? – banjollity

+0

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

ответ

4

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

1

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

0

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

0

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

0

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

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

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