Я разработал веб-приложение 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("")