我开发了一个 Java EE Web 应用程序。此应用程序允许用户在浏览器的帮助下上传文件。一旦用户上传了他的文件,这个应用程序首先将上传的文件存储在服务器上(它正在运行),然后处理它。
目前,我将文件存储在服务器上,如下所示:
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 的上下文路径。返回的真实路径将采用适合运行 servlet 容器的计算机和操作系统的格式,包括正确的路径分隔符。如果 servlet 容器由于任何原因(例如当内容从 .war 存档中可用时)无法将虚拟路径转换为真实路径,则此方法返回 null。
那么,有没有其他方法可以将文件存储在那些服务器上也null
返回getServlet().getServletContext().getRealPath("")