如何使用Apache Common fileupload为上传的文件设置"上下文路径"的路径?

Abd*_*lah 4 java servlets apache-commons-fileupload

我正在使用Apache公共文件上载库和Netbeans 6.8 + Glassfish.我正在尝试将当前上载路径更改为位于servlet的当前上下文路径中,如下所示:WEB-INF/upload

所以我写道:

File uploadedFile = new File("WEB-INF/upload/"+fileName);
session.setAttribute("path",uploadedFile.getAbsolutePath());
item.write(uploadedFile);
Run Code Online (Sandbox Code Playgroud)

但是我注意到库将上传的文件保存到glassfish文件夹中,这是我打印上传文件的绝对路径时得到的:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 
Run Code Online (Sandbox Code Playgroud)

我的问题 :

  • 如何强制公共文件上载将上传的文件保存在相对于当前servlet路径的路径中,所以我不需要指定整个路径?这可能吗 ?

Bal*_*usC 8

java.io.File本地磁盘文件系统上的行为,并知道绝对没有关于它的运行环境.你不应该指望它来寻找"正确"的位置,当你传递一个相对的网络路径中.这将成为相对于当前的工作目录这取决于你如何启动环境.你不想依赖它.

您可以使用ServletContext#getRealPath()将相对Web路径转换为绝对本地磁盘文件系统路径.

String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...
Run Code Online (Sandbox Code Playgroud)

也就是说,我希望您知道部署文件夹不是上传文件的正确位置,这些文件应该永久保存.重新部署Web应用程序时,一切都会丢失.另请参阅如何将文件写入应用程序的resources/images文件夹?