2010-09-17 2 views
1

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

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

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

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

/USR/местное название/кот/работа/Catalina/проект здесь/контекст проекта здесь/upload_490341a6_12b1d397355_76ce_00000001.tmp

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

ServletActionContext.getContext(). GetSuperHiddenTemporaryCatalog();

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

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

Я хочу, чтобы путь sourceFile был временной папкой 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 ""; 

    } 

} 

ответ

1
 
File tempDir = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); 

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

+0

Спасибо, это помогло много! Получил файловую загрузку для работы. Этот способ также добавил дополнительные проверки, чтобы проверить, читается ли файл и так далее! Благодаря! –

0

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

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

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

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

+0

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

Смежные вопросы