2012-02-14 70 views
1

我正在使用Apache Commons File Uploader API。当我使用绝对路径c:\\my uploads\\时它正在成功工作。那是文件将被上传到那个地方。如何将上传的文件写入web项目内的文件夹?

我正在使用NetBeans 7进行开发。在我的项目树中,我创建了另一个名为uploads的文件夹。所以当我使用像uploads//uploads/pics/这样的相对路径时,它不起作用。也就是说,没有错误。但文件不会写入该文件夹。我正在使用“File”对象并使用其“write()”函数。

我的项目文件夹结构是这样的:

-- C:\ 
-- -- my project\ 
-- -- -- school\ 
-- -- -- -- web\ 
-- -- -- -- -- index.jsp 
-- -- -- -- -- fileupload.jsp 
-- -- -- -- -- uploads\ 
-- -- -- -- -- -- pics\ 

回答

2

你基本上需要通过ServletContext#getRealPath()的相对网络路径转换为绝对磁盘文件系统路径。

String relativeWebPath = "/uploads"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
String filename = FilenameUtils.getName(item.getName()); 
File file = new File(absoluteDiskPath, filename); 
// ... 

但是,这种将上传文件写入扩展WAR文件夹的方法绝对不推荐。重新部署WAR时,所有这些上传的文件都会丢失(仅仅因为它们不包含在原始WAR中)。当服务器配置为在内存中而不是在磁盘上扩展WAR时,它也不起作用。然后getRealPath()将返回null

将上传的文件写入展开WAR文件夹之外的路径。你在第一个地方做对了。您始终可以通过将上载文件夹指定为VM参数或属性文件设置来配置上载文件夹。

最后但并非最不重要的一点,Java代码属于Java类而不是JSP文件。

+0

thanku。我将使用“C:\\ my uploads \\”作为位置。但如何检查文件夹是否存在?如果不存在,请创建一个。 'File'的对象包含'mkdir()'。但它不接受一条道路。所以我很困惑 – 2012-02-14 12:18:13

+0

只需在'new File(“C:/ my uploads”)中调用它即可。 – BalusC 2012-02-14 12:20:09

+0

thanku。我正在使用它。但我不知道它是这样工作的。 – 2012-02-14 12:22:22

相关问题