Загрузить файл в каталог на сервере с использованием Java и JSP - не удается правильно указать путь - PullRequest
3 голосов
/ 18 января 2011

На моем vps я хочу загрузить файл в каталог Logos.Структура моего каталога выглядит следующим образом:
/home/webadmin/domain.com/html/Logos

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

Фрагмент кода сервлета -

String upload_directory="/Logos/"; // path to the upload folder

File savedFile = new File(upload_directory,BusinessName+"_Logo."+fileExtension);

//.....
//file saved to directory
//.....

Я имеюперепробовал много вариантов, но все равно не получилось.Как правильно указать путь?

Отредактировано
Проблема с использованием getServletContext () заключается в том, что он возвращает путь к каталогу, где находится Tomcat и мое веб-приложение ...where, где я хочу добраться до каталога, где мои HTML-файлы и файлы изображений - в корневом каталоге VPS.Как мне указать этот путь?

    String server_path = getServletContext().getRealPath("/"); // get server path.                      

    //server_path = /opt/tomcat6/webapps/domain.com/

    String upload_directory = "Logos/"; // get path to the upload folder.

    String complete_path = server_path + upload_directory; // get the complete path to the upload folder.

    //complete_path = /opt/tomcat6/webapps/domain.com/Logos/

    File savedFile = new File(complete_path,"NewLogo.jpg");

    //savedFile = /opt/tomcat6/webapps/domain.com/Logos/NewLogo.jpg 

Ответы [ 4 ]

3 голосов
/ 18 января 2011

Обычная практика - настраивать путь к хранилищу - либо через некоторый файл application.properties, либо, если у вас нет такого файла свойств, - как context-param в web.xml. Там вы настраиваете путь для абсолютного пути, например:

configuredUploadDir=/home/webadmin/domain.com/html/Logos

Получите это значение в вашем коде (в зависимости от того, как вы его сохранили) и получите:

File uploadDir = new File(configuredUploadDir);

Примечание : убедитесь, что у вас есть права на чтение и запись целевого каталога.

2 голосов
/ 26 августа 2011

Вы можете использовать следующий код в любом jsp или сервлете.

1) String serverPath = getServletContext (). GetRealPath ("/");

Это будетдать вам полный путь сервера от корневого каталога до каталога вашего веб-приложения.
Для меня это: "D: ​​\ local \ tomcat-6.0.29 \ webapps \ myapp" , когда я sysout из myappapplication.

Как только вы получили полный реальный путь для серверной системы, как указано выше, вы можете получить путь относительно своего каталога.Поэтому, если у меня есть какой-либо файл данных в myapp \ data - я могу получить его, добавив \ data \ filename к serverPath, который мы получили ранее.
Это будет работать в любой ситуациидаже если в одной системе установлено несколько серверов.

2) Вы можете получить домашний сервер из системных свойств , используя

System.getProperty ("TOMCAT_HOME")

и затем может использовать этот абсолютный путь в вашей программе

3) Чтобы передать абсолютный путь к каталогу любому сервлету, используя <init-param>

Надеюсь, это сработает для вас.

1 голос
/ 23 марта 2011

Ну, проблема в том, что конструктор файлов не создает файл, а только подготавливает его к созданию, затем, после создания экземпляра файла, вы должны вызвать метод createNewFile (), и на этом все.

0 голосов
/ 18 января 2011

Путь "/ Logos /" будет пытаться создать файл в корне вашей системы, что не то, что вам нужно. Посмотрите на метод ServletContext.getRealPath ().

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