Java, Tomcat 6: сохранение файлов на локальном HD - PullRequest
2 голосов
/ 11 октября 2010

Я уже некоторое время ищу это онлайн (Google и StackOverflow), но еще не сталкивался с этим вопросом.Возможно, мой запрос неверен (пожалуйста, перенаправьте!)

Я разработал и настроил WebApp на TomCat 6 под Linux.Tomcat еще не работает в среде виртуального хоста, у меня есть полный контроль над сервером.Поэтому файл .war сохраняется в стандартном каталоге установки Tomcat.У меня проблема с изображениями: различные веб-сервисы предоставляют изображения разных размеров, которые должны быть представлены в одинаковых размерах.

Я загружаю их и изменяю их размер без проблем, но мне нужно хранить локальную копию изображения.поскольку это занимает некоторое время, если это делается в режиме реального времени, плюс много трата пропускной способности.Я не сохраняю их под временным каталогом .war в Tomcat из-за случая, когда остановка сервера вынудит меня перезагрузить все изображения.

Я создал другой каталог в / home / username / images, который затем обслуживаю в другом поддомене через обычный Apache, и HTML-код, сгенерированный в .jsp, является просто правильным URL-адресом файла.Прекрасно работает, если изображение не существует.Однако из-за проблем с разрешениями экземпляр Tomcat не может удалять или перезаписывать уже созданные файлы, хотя я пометил папку, в которой хранятся изображения с разрешениями 777.Кроме того, я не вижу необходимости давать ему 777 разрешений, но с 755 (например) у меня были проблемы с разрешениями даже при попытке сохранить новый файл.

Итак: есть ли лучшее решение(Я рассматривал базу данных, но каталог изображений теперь 250 МБ, и я не вижу необходимости слишком сильно перегружать БД)?

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

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

Если это только tomcat, рассматриваемый каталог должен принадлежать tomcat, и разрешения могут быть либо750 (настройка группы в соответствии с группой apache) или 755 (группа не имеет значения, любой пользователь на машине может читать файлы).

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

Документация для chown и chmod должна быть очень полезна.

(Да, я понимаю, что этот вопрос очень старый,но применяются те же принципы, и никто, похоже, не дал четкого ответа).

1 голос
/ 11 октября 2010

Не храните изображения в базе данных.Ваш /home/user/www.example.com/resources подход в правильном направлении, просто разберитесь с проблемой привилегий.Убедитесь, что путь находится в группе, к которой принадлежит пользователь, запускающий tomcat (tomcat?), И уменьшите значение 777, поскольку оно слишком широкое.

0 голосов
/ 11 октября 2010

Что конкретно происходит с разрешениями?Tomcat будет работать под некоторым идентификатором пользователя (скажем, tomcat1) и будет создавать файлы, предположительно принадлежащие тому же пользователю (tomcat1).Если ваши файлы создаются с другим владельцем, тогда это объяснит, почему вы не можете перезаписать существующие загрузки, и вам нужно разобраться, почему владельцы различаются.Если это не собственность, то файлы создаются без разрешения на запись для пользователя.В этом случае рассмотрите возможность явной установки разрешений для каждого сохраненного файла, чтобы позволить владельцу писать в него или изменить маску учетной записи пользователя.

...