Как я могу создать новую папку в своем веб-приложении (для загрузки фотоальбома) с Grails на Tomcat? - PullRequest
3 голосов
/ 22 апреля 2010

Я хочу создать фотоальбом. Но я хочу организовать на сервере альбомы, чтобы создавать новые папки:

/ MyApp / MYAPP / альбомы / MyApp / альбомы / 1 / MyApp / альбомы / 2 ...

Как я могу сделать это на коте с Grails? Он создает все новые папки в tomcat / bin, а не в tomcat / webapps / myapp /

Ответы [ 2 ]

6 голосов
/ 22 апреля 2010

Когда мне приходилось делать что-то подобное, я определял корневой путь в моем Config.groovy как

environments {
    production {
rootPath="/home/user/reports"
    }
    development {
rootPath="c:\\reports"
    }
    test {
rootPath="c:\\reports"
    }

Затем создайте каталог, подобный следующему.

import org.codehaus.groovy.grails.commons.ConfigurationHolder as Conf
tempFile=new File(Conf.config.rootPath+"dirName")
tempFile.mkdir()
2 голосов
/ 22 апреля 2010

Я не использую Grails, но поскольку он работает поверх Servlet API, этот ответ (управление в правильном направлении) может оказаться полезным.

Сначала возьмите ручку ServletContext. Обычно для этого вы используете метод GenericServlet, унаследованный getServletContext(). Затем используйте метод ServletContext#getRealPath() для преобразования относительного веб-пути в абсолютный путь к файловой системе на локальном диске (потому что это единственный который java.io.File достоверно понимает).

String absolutePath = getServletContext().getRealPath("albums/1");
File file = new File (absolutePath);
// ...

Если вы используете относительные пути в java.io.File материале, то он станет относительным к текущему рабочему каталогу, который зависит от того, как вы запустили сервер, и который действительно может быть Tomcat/bin, как вы сами испытали.

Тем не менее, есть еще одна серьезная проблема с этим подходом: если вы создадите папки в разобранном веб-приложении, они потеряются при повторном развертывании веб-приложения или даже перезапуске сервера! Скорее создайте папки вне контекста веб-приложения, по фиксированному пути где-нибудь еще в файловой системе диска. Или, если вам нужна лучшая переносимость (но более скудная информация о метаданных), лучше вместо этого сохранить ее в базе данных.

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