Как сохранить файл на сервере (веб-контейнер) через веб-приложение Java EE?

Я разработал веб-приложение Java EE. Это приложение позволяет пользователю загружать файл с помощью браузера. Как только пользователь загрузил свой файл, это приложение сначала сохраняет загруженный файл на сервере (на котором он работает), а затем обрабатывает его.

В настоящее время я храню файл на сервере следующим образом:

try {
    // formFile represents the uploaded file
    FormFile formFile = programForm.getTheFile();
    String path = getServlet().getServletContext().getRealPath("") + "/"
        + formFile.getFileName();
    System.out.println(path);
    file = new File(path);
    outputStream = new FileOutputStream(file);
    outputStream.write(formFile.getFileData());
}

гдеformFile представляет загруженный файл.

Теперь проблема в том, что он работает нормально на некоторых серверах, но на некоторых серверахgetServlet().getServletContext().getRealPath("") возвращаетсяnull так что последний путь, который я получаю, этоnull/filename и файл не хранится на сервере.

Когда я проверил API дляServletContext.getRealPath() Методом я обнаружил следующее:

public java.lang.String getRealPath(java.lang.String path)

Возвращает строку, содержащую реальный путь для данного виртуального пути. Например, путь"/index.html" возвращает абсолютный путь к файлу в файловой системе сервера, который будет обслуживаться запросом"http://host/contextPath/index.html"где contextPath - это контекстный путь этого ServletContext.

Реальный возвращенный путь будет в форме, соответствующей компьютеру и операционной системе, в которой работает контейнер сервлета, включая надлежащие разделители пути. Этот метод возвращает значение null, если контейнер сервлета по какой-либо причине не может преобразовать виртуальный путь в реальный путь (например, когда содержимое становится доступным из архива .war).

Итак, есть ли другой способ, с помощью которого я могу хранить файлы на тех серверах, которые возвращаютсяnull заgetServlet().getServletContext().getRealPath("")

Ответы на вопрос(2)

Ваш ответ на вопрос