Копирование файла из временной папки Tomcat с использованием Java - PullRequest
1 голос
/ 17 сентября 2010

В основном моя проблема заключается в том, что мне нужно скопировать загруженный файл (который помещается во временную папку на моих серверах-провайдерах Tomcat, т. Е. Не локальный Tomcat).

Код, который я использую, работает при развертывании моего проекта на локальном компьютере, но перестает работать при развертывании его в режиме реального времени. Я обнаружил, что это связано с моими разрешениями в java.policy.

Мне нужно выяснить, как мне получить доступ к папке, в которой Tomcat хранит временный файл с помощью Java.

При чтении catalina.out это ключ, который мне дает журнал.

/ usr / local / tomcat / work / Catalina / имя проекта здесь / контекст проекта здесь / upload_490341a6_12b1d397355_76ce_00000001.tmp

Я размышляю где-то вдоль строк (примечание: это не фактический метод: P)

ServletActionContext.getContext () getSuperHiddenTemporaryCatalog ();.

Фрагмент кода внизу имеет один недостаток.

sourceFile и targetFile в данный момент указывают на один и тот же каталог.

Я хочу, чтобы путь к исходному файлу был временной папкой tomcat.

Заранее спасибо! : D


public String saveImage(File file, String uploadedFileName) {

    String path = ServletActionContext.getServletContext().getRealPath("images");

    System.out.println(path);

    String fullFileName = path + "/" + uploadedFileName;

    System.out.println(fullFileName);

    boolean successful = false;

    try {

        File sourceFile = new File(fullFileName);

        File targetFile = new File(path + "/" + uploadedFileName);

        InputStream in = new FileInputStream(sourceFile);
        OutputStream out = new FileOutputStream(targetFile);

        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();


    } catch (Exception e) {

        successful = false;

        e.printStackTrace();

    }

    if (successful) {

        return "context of project/images/" + uploadedFileName;

    } else {

        return "";

    }

}

Ответы [ 2 ]

1 голос
/ 17 сентября 2010
File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir");

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

0 голосов
/ 17 сентября 2010

Код, который я использую, работает при развертывании моего проекта на локальном компьютере, но перестает работать при развертывании его в режиме реального времени. Я обнаружил, что это связано с моими разрешениями в java.policy.

Да. Это пример изолированной программной среды безопасности Java.

Мне нужно выяснить, как мне получить доступ к папке, в которой Tomcat хранит временный файл с помощью Java.

Вы не можете обойти изолированную программную среду безопасности (по модулю какой-то не исправленной ошибки в вашей JVM). Вам нужно изменить настройки «java.policy», чтобы у вашего веб-приложения было разрешение скопировать файл туда, куда его нужно скопировать. Возможно, вам придется обсудить это с тем, кто занимался проектированием безопасности и т. Д. Для ваших производственных Tomcats.

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