我开发了一个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
,文件没有保存在服务器上。
当我查看 ServletContext.getRealPath()
方法的 API 时,我发现如下内容:
public java.lang.String getRealPath(java.lang.String path)
返回一个字符串,其中包含给定虚拟路径的实际路径。例如,路径
"/index.html"
在服务器文件系统上的绝对路径将由请求"http://host/contextPath/index.html"
提供,其中 contextPath 是该 ServletContext 的上下文路径。返回的实际路径将采用计算机和操作系统所需的格式,包括适当的路径分隔符。如果 Servlet 容器无法将虚拟路径转换为实际路径,该方法将返回 null(例如,当内容从 .war 存档中提供时)。
那么,是否有其他方法可以在那些返回 null
的服务器上存储文件,而不是使用 getServlet().getServletContext().getRealPath("")
方法呢?