Как сохранить файл на сервере (веб-контейнер) через веб-приложение 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("")