Я написал небольшое веб-приложение, используя Grails. Полученный военный файл развертывается на сервере приложений Tomcat.

Приложение имеет функцию загрузки вложений. Я решил сохранить загруженные файлы на диск (вместо хранения больших двоичных объектов в БД).

Сначала я выбрал путь к файлу внутри webapp-dir для хранения файлов, но потом понял, что этот каталог будет перезаписываться при каждом развертывании нового файла войны.

Существуют ли рекомендации для "где хранить загруженные файлы в вашей локальной файловой системе"?

Спасибо за вашу помощь.

7
DiegoFrings 9 Фев 2011 в 16:53
Если вы читаете список рассылки Grails, то заметите, что у меня был точно такой же вопрос. Надеюсь на хороший ответ.
 – 
Josh K
9 Фев 2011 в 16:54
1
Не могли бы вы опубликовать решение здесь, если вы получите что-то полезное из списка рассылки?
 – 
DiegoFrings
9 Фев 2011 в 18:13

4 ответа

AlphaOne, мы делаем что-то похожее на то, о чем вы просите, но мы используем веб-сервер Apache перед Tomcat. Берем полный путь из конфиг файла и пишем в него. Произнесите «/tmp/branding». Затем мы также берем URL-адрес для этого местоположения из файла конфигурации (например, «myapp/branding») и используем его в наших GSP. Затем в Apache мы сопоставляем запросы приложений для этого URL-адреса («myapp/branding»), чтобы перейти непосредственно к местоположению файла, минуя Tomcat.

2
Sunny 9 Фев 2011 в 18:36
1
Слово предупреждения, многие операционные системы будут время от времени очищать каталог tmp. Часто это делается во время загрузки, если прошло определенное количество дней. Это может показаться непредсказуемым и может быть сложным для отладки.
 – 
Casey Watson
30 Авг 2011 в 19:10

Создайте отдельный проект для загрузки и передайте имя пользователя для создания папки для конкретного пользователя. Укажите ссылку на этот проект из основного проекта, когда пользователь захочет загрузить файлы.

2
cweston 17 Июн 2015 в 21:55

Я думаю, вы ищете лучшее практическое решение. Ну, на самом деле их нет, но есть места, куда их не следует помещать. Я предполагаю, что это среда UNIX.

Например:

  • $CATALINA_HOME. Просто оставьте папку приложения такой, какая она есть, не засоряйте ее загружаемыми файлами.
  • / тмп . Никогда не знаешь, кто будет это убирать.

Хотя я не уверен, что это заблокированная спецификация, вы можете посмотреть: структура каталогов linux.

Как я прочитал, у вас есть 3 варианта:

  1. Если Tomcat запускается с использованием выделенного пользователя -> Домашний каталог пользователей. Например, ~/Fileuploads/имя_приложения
  2. Поскольку var можно рассматривать как растущий каталог данных приложения. Например: /var/Fileuploads/имя приложения
  3. Оставьте это системному администратору. Ознакомьтесь с этим: Внешняя конфигурация Grails

Удачи!

0
Community 23 Май 2017 в 14:45

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

1
codelark 9 Фев 2011 в 17:10
Звучит интересно, но операционная группа может настроить каталог только для путей, которые может обрабатывать сервер приложений. если файлы будут храниться, скажем, в «/tmp/», сервер приложений не сможет отправить это изображение в браузер. Итак, где хорошее место, отвечающее обоим требованиям: сервер приложений может отправлять файлы в браузер, И каталог не будет перезаписан при развертывании?
 – 
DiegoFrings
9 Фев 2011 в 18:02
Они также должны контролировать конфигурацию сервера приложений/веб-сервера. Если вам также необходимо обслуживать контент обратно, другим параметром конфигурации должен быть URL-адрес обслуживаемого каталога.
 – 
codelark
9 Фев 2011 в 20:19