Как я могу создать папку на сервере (Tomcat 7)? - PullRequest
1 голос
/ 12 октября 2011

Я использую java и jsf, и я хотел бы создать папку на сервере, а затем временно сохранить файлы и впоследствии удалить их (не саму папку).Я пробовал этот код:

boolean folderPath;
folderPath = new File ("/Images").mkdir();

, но код выше создал папку на моем локальном диске.

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Не делай этого.Вы никогда не можете гарантировать, что папка WAR доступна для записи или даже на физическом диске.Например, когда сервлет-контейнер настроен на расширение WAR в память, а не на диск.

Поскольку это, по-видимому, временный файл, просто используйте File#createTempFile():

File tempFile = File.createTempFile("filename", ".png");
// ...

Или используйте внешнюю папку в файловой системе с фиксированным диском, абсолютный путь которой равендля установки в качестве аргумента ВМ или какого-либо параметра конфигурации.


Обновление : вы можете использовать сервлет для отображения этого файла.Я понимаю, что это файл изображения.Вы можете использовать <h:graphicImage>, в котором вы задаете имя файла временного файла в пути.

Например, внутри компонента:

this.filename = tempFile.getName();

, а затем в представлении:

<h:graphicImage value="images/#{bean.filename}" />

Сервлет, который должен прослушивать /images/*, может выглядеть следующим образом (исключительные проверки для вашего упражнения опущены):

@WebServlet("/images/*")
public class ImageServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File file = new File(System.getProperty("java.io.tmpdir"), request.getPathInfo());

        response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
        response.setHeader("Content-Length", String.valueOf(file.length()));

        InputStream input = new FileInputStream(file);
        OutputStream output = response.getOutputStream();

        // Now write input to output the usual way.
    }

}
0 голосов
/ 26 декабря 2013

С Primefaces я использую это:

Импортируйте это:

import javax.faces.context.ExternalContext;

Затем основной класс:

String resultFolder = "newFolder";

ExternalContext extContext = FacesContext.getCurrentInstance (). GetExternalContext ();

Файл result = новый файл (extContext.getRealPath ("// WEB-INF //" + resultFolder) .mkdir ();

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