我正在使用带有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
我的问题:
答案 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?