Alexiuscrow
@Alexiuscrow

Как организовать хранение изображений в веб-проекте под Tomcat?

Проблема
Есть клиент и есть сервер. Серверную часть пишу на java. WAR-файл разворачивается под Tomcat-ом. Клиент должен иметь возможность загрузить изображение на сервер.

Вопрос
В какую директорию загружать изображения? Как организовать хранение медиа-файлов?
Данные необходимо хранить вне папки проекта дабы при редеплое всё не удалилось.
  • Вопрос задан
  • 7459 просмотров
Решения вопроса 1
Alexiuscrow
@Alexiuscrow Автор вопроса
Решил свою проблему следующим образом:
  1. в config-файле Tomcat ("/conf/server.xml") прописал:
    <Context docBase="/server/file_storage/images" path="/images" />

  2. получаю доступ к изображению в приложении
    File file = new File("/server/file_storage/images", id + ".jpg");


Таким образом если приложение разворачивается на Tomcat, который установлен на диске "D" то абсолютный путь к изображению будет иметь вид: "D://server/file_storage/images/{id}.jpg".

За подробностями сюда: stackoverflow.com/a/1812356 .

P.S. Из области "see also": Jersey File Upload Example
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
timych
@timych
Загружайте в любую директорию на сервере. Просто в каком -нибудь конфиге пропишите корень к файловому хранилищу. Там уже как душа пожелает.
PS: Вот подобный вопрос - Как лучше всего организовать хранение файлов?
Ответ написан
Applez
@Applez
Разраб
В ваш web.xml прописываете блоки . Например
<context-param>
		<param-name>path_to_image</param-name>
		<param-value>/images</param-value>
	</context-param>

Для загрузки всего этого барахла, пишете класс-холдер параметров:
public final class ApplicationParameters {

        public final static String pathToImageParameter= "path_to_image";

        private String pathToImage;

        	public String getPathToImage() {
             		return pathToImage;
        	}

     public static ApplicationParameters create(ServletContext servletContext) {

          pathToImage = servletContext.getInitParameter(ApplicationParameters.pathToImageParameter);

      }
}


Для того, чтобы все это инициализировалось и заработало, в методе Init() сервлета, вызываете create, например так:
public class InitServlet extends HttpServlet {
     @Override
	     public void init() throws ServletException {
           		super.init();
           ApplicationParameters.create(getServletContext());
     }
}

Дальше, где нужно, забираете переменную пути к файлам картинок и сохраняете.
В коде переменные не статики, поэтому либо сделайте их статиками, либо храните объект.
P.S.Код может быть не рабочий, слобал на коленке и не проверял, но идея используется повсеместно.
Ответ написан
zolt85
@zolt85
Программист
Тут все просто.
Хранить можно в ФС, можно в БД.
Хранить в ФС советую если сервер полностью Ваш, т.е. Вы сами обеспечиваете его. Если же Вы используете какой-нибудь Heroku, то тут однозначно БД. Из плюсов хранения в БД, это относительно не сложный backup.

В проекте, над которым я работаю, файлы хранятся в ФС (сервер хоть и принадлежит заказчику, но он полностью в нашем распоряжении). Путь до корневого каталога с файлами лежит в БД. И вся мета-информация о файле лежит в БД.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы