Где сохранить пользовательские файлы? - PullRequest
0 голосов
/ 06 июля 2011

Я разработал веб-приложение с использованием Tomcat 6.0.32 на стороне сервера.

На стороне клиента пользователи могут отправлять файлы (максимальный размер: 10 МБ), и мое веб-приложение должно сохранять их локально. Эти файлы не должны быть получены напрямую через URL (например: http://www.mywebapp.com/user/file1.png).

Где мне сохранять эти файлы? Я полагаю, в / WEB-INF / user_folder / или есть другие места?

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

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

  • в $ CATALINA_HOME / webapp / WEB-INF /...
  • в $ CATALINA_HOME / webapp /...
  • в $ CATALINA_HOME / temp /...
  • в пользовательском подкаталоге $ CATALINA_HOME
  • где-то еще в локальной файловой системе
  • на сетевом ресурсе
  • в базе данных
  • на каменных табличках, похороненных на дне сада.

На практике вам решать, какой из них будет проще всего управлять. Например:

  • Если вы поместите файлы в каталог веб-приложения, существует риск, что повторное развертывание веб-приложения уничтожит файлы.
  • Если вы поместите файлы за пределы дерева $ CATALINA_HOME и запустите Tomcat с включенной защитой Java, ваше веб-приложение может быть заблокировано от чтения / записи файлов. (И это может быть на самом деле хорошо!)
  • Вам необходимо убедиться, что запрос не может читать / записывать файлы в неожиданных местах. Например, вам необходимо защитить от запросов, использующих ".. / .. / ....", для разрыва и доступа к файлам в операционной системе хоста; например »../../../../etc/passwd".
  • Необходимо учитывать вопросы резервного копирования и управления файловым пространством.
  • (Каменные таблички представляют некоторые интересные проблемы ...)
0 голосов
/ 06 июля 2011

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

Контроль URL и контекста (например, mywebapp.com/user/*) должен контролироватьсяпутем настройки в web.xml или при использовании различных сред MVC, таких как Struts, struts.xml.

Возможно, вы захотите подумать о будущем и сохранить загруженные пользователем файлы в других местах на вашем сервере, таких как/apps/myproject/user-uploads.

0 голосов
/ 06 июля 2011

Вы можете использовать библиотеку загрузки файлов Apache и Apache Commons io. Из соображений безопасности лучше сохранять свои файлы в другом месте. Например, в месте на жестком диске и хранить место в базе данных. Кто-то может загрузить ваши файлыхотя ваш URL, если вы сохраните свои файлы в веб-папке.Затем вы можете создать сервлет, который откроет файл и отправит его клиенту.

Загрузка файлов через Apache commons

...