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

时间:2010-05-25 04:13:21

标签: java servlets apache-commons-fileupload

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

所以我写道:

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

但我注意到图书馆将上传的文件保存到 glassfish文件夹,这是我打印上传文件的绝对路径时得到的结果:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

我的问题:

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

1 个答案:

答案 0 :(得分:8)

java.io.File作用于本地磁盘文件系统,并且对其运行的上下文一无所知。当您传递相对Web路径时,不应指望它找到“正确”的位置 in。它将与当前工作目录相关,这取决于您启动环境的方式。你不想依赖它。

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

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

也就是说,我希望您知道部署文件夹不适合永久保存的上传文件。重新部署Web应用程序时,一切都会丢失。另请参阅How to write a file to resource/images folder of the app?