Как я могу автоматически создать новую папку в Tomcat и использовать ее для хранения загруженных данных? - PullRequest
0 голосов
/ 01 января 2012

Хорошо, я изучаю и внедряю, как загружать и извлекать изображения из папки на самом сервере.Но я реализовал это в папке, которая сама находится в каталоге моего веб-приложения.Я знаю, что это не очень хорошая идея, но сервлет image с путем /image/* не может получить доступ к папке в каталоге с путем context, установленным в server.xml.Коды: Image.java servlet:

public class Image extends HttpServlet {

public static void returnFile(String filename, OutputStream out)
        throws FileNotFoundException, IOException {
    // A FileInputStream is for bytes
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(filename);
        byte[] buf = new byte[4 * 1024];  // 4K buffer
        int bytesRead;
        while ((bytesRead = fis.read(buf)) != -1) {
            out.write(buf, 0, bytesRead);
        }
    } finally {
        if (fis != null) {
            fis.close();
        }
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // Use a ServletOutputStream because we may pass binary information
    ServletOutputStream out = response.getOutputStream();

    // Get the file to view
    String file = request.getPathTranslated();

    // No file, nothing to view
    if (file == null) {
        out.println("No file to view");
        return;
    }

    // Get and set the type of the file
    String contentType = getServletContext().getMimeType(file);
    response.setContentType(contentType);

    // Return the file
    try {
        returnFile(file, out);
    } catch (Exception ex) {
        System.out.print("\n" + ex.getMessage() + "\n");
        ex.printStackTrace();
    }
}

}

context variable:

<Context path="*/photos/users" docBase="G:\myApp\images\users" debug="0" reloadable="true" />

Я хочу дать Произвольный путь что-то вроде / data / users рядом с моим веб-приложением вместо абсолютного пути G: \ myApp \ images \ users , которое создается динамически при первом развертывании веб-приложения на любом Tomcat 6.x /7.x серверный компьютер и может быть использован всякий раз, когда я хочу получить доступ к данным внутри него .. Я надеюсь, что я ясно со своим вопросом.

1 Ответ

1 голос
/ 01 января 2012

Вы можете создать каталог, используя File.mkdir или File.mkdirs.Первый создает каталог в назначенном им родителе, который уже должен существовать.Второй также создает родительские и «родительские» каталоги, если это необходимо.

Обратите внимание, что ваше приложение может не работать с достаточными правами для создания каталогов или файлов в произвольных местах.Кроме того, хотя File.mkdirs может создавать несколько каталогов, он не может создавать объекты на несуществующих дисках Windows.Поэтому важно проверить boolean, возвращаемый методами mkdir и mkdirs.(И если это false, то вы мало что можете с этим поделать!)


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

Если вы используете файловую систему для сохранения состояния вашего веб-приложения, то лучше создать средство развертывания.базовый каталог от руки.По крайней мере, таким образом он / она знает, что он был создан и где он находится ... и, если он / она неверно получает путь, веб-приложение может обнаружить это и отказать в запуске.(Это также решает проблему с привилегиями. Для развертывателя лучше выполнить команду mkdir с повышенной привилегией, чем для веб-контейнера с повышенной привилегией.)

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