2010-05-25 68 views
3

我使用Apache共同文件上传库使用Netbeans 6.8 + Glassfish.I'm试图改变当前的上传路径是在servlet的当前上下文路径,像这样: WEB-INF /上传如何使用Apache Common fileupload为上传的文件设置路径为“上下文路径”?

所以我写了:

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路径的路径在上传的文件,所以我并不需要指定整个路径?这可能吗 ?

回答

7

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

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

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

这就是说,我希望你知道,部署文件夹不是上传文件的正确位置,应该永久保存。重新部署webapp时,一切都会丢失。又见How to write a file to resource/images folder of the app?