4

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

所以我写道:

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 

我的问题 :

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

1 回答 1

8

java.io.File作用于本地磁盘文件系统,对它运行的上下文一无所知。当你传入一个相对的 web 路径时,你不应该期望它找到“正确”的位置。它将变得相对于当前工作目录这取决于您如何启动环境。你不想依赖它。

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

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

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

于 2010-05-25T11:32:32.323 回答