Где я должен хранить фотографии пользователей в веб-приложении Java? - PullRequest
2 голосов
/ 14 марта 2011

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

Где мне хранить файл аватара? Прежде всего я сохранял все файлы в src \ main \ webapp \ resources, но каждый раз, когда я заново развертывал эту папку, опустошается.

поэтому я решил разместить его в другом месте: c: \ wwwdir \ resources, , но не могу связать локальные ресурсы с удаленных страниц , поэтому я не смог отобразить ни одного аватара.

есть идеи? консультировать? ссылка

Ответы [ 4 ]

7 голосов
/ 14 марта 2011

Что нужно учесть, прежде чем прийти к решению:

  • Будете ли вы горизонтально масштабировать свое веб-приложение (т.е. будете ли вы запускать несколько экземпляров контейнера сервлета).
  • Какой трафик вы ожидаете?
  • Как быстро необходимо обновить изображение (т. Е. После того, как пользователь меняет свой аватар, если они и все другие пользователи сразу увидят новый аватар).

Для веб-приложения, которое не масштабируется по горизонтали, вы можете использовать файловую систему в качестве хранилища изображений. Это просто, понятно и работает.

Для веб-приложений, которые масштабируются по горизонтали, вам необходимо хранить изображения в месте, доступном для каждого контейнера сервлета. Это может быть база данных (я не рекомендую это), S3 (я рекомендую это) или хранилище контента (я никогда не использовал один из них). Одним из преимуществ S3 является то, что он хорошо масштабируется. Вы можете оставить его позади CloudFront (Amazon CDN) или просто отключить сервер от S3 и сохранить нагрузку на свои серверы.

Вы также упоминаете в своем вопросе, что не можете обслуживать локальный ресурс с удаленных клиентов. Это правильно, вроде ... Я предполагаю, что вы пытаетесь использовать какой-то URL, например file://c:/.../image.jpg. Это не сработает. Что вам нужно сделать, это сопоставить обработчик для обработки изображения. Это может выглядеть примерно так:

@RequestMapping(value = "/image/{name}.jpg", method = RequestMethod.GET)
public void image(@PathVariable("name") String name, HttpServletResponse response) {
    // Read the image from the file system using java.io
    // Write the image to the response output stream
    // Even better use org.springframework.utils.FileCopyUtils
}
3 голосов
/ 14 марта 2011

Как насчет создания сервлета, который считывает ваш локальный ресурс из того места, где вы его сохранили, и просто передает его обратно в виде соответствующего типа контента?Таким образом, вместо <img src="/resources/xyz.jpg"/> у вас будет что-то вроде <img src="/resourceservlet?id=xyz.jpg"/>.Таким образом, вы можете хранить файлы в своей папке C: \ wwwdir \ resources так, как вы хотите.

Поиск в Интернете «сервлета изображения Java» даст вам несколько ссылок на то, как это сделать.,Вы можете использовать один из этих пользовательских сервлетов или, как уже упоминалось в другом ответе, использовать для этого средства инфраструктуры, например Spring.

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

0 голосов
/ 14 марта 2011

Как насчет старых старых MySQL ?

Другой вариант для аватаров - использовать gravatar.com (или что-то подобное).Этот подход гораздо более современный и эффективный, чем хранение аватаров внутри дома.

0 голосов
/ 14 марта 2011

Попробуйте репозиторий содержимого Java, такой как Alfresco или Jackrabbit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...