我正在使用Apache Commons File Uploader API。当我使用像c:\\my uploads\\
这样的绝对路径时,它正在成功运行。那个文件将被上传到那个地方。
我正在使用NetBeans 7进行开发。在我的项目树中,我创建了另一个名为uploads
的文件夹。因此,当我使用uploads/
或/uploads/pics/
等相对路径时,它无效。也就是说,没有错误。但文件不会写入该文件夹。我正在使用" File"的对象并使用它的" write()"功能
我的项目文件夹结构如下:
-- C:\
-- -- my project\
-- -- -- school\
-- -- -- -- web\
-- -- -- -- -- index.jsp
-- -- -- -- -- fileupload.jsp
-- -- -- -- -- uploads\
-- -- -- -- -- -- pics\
答案 0 :(得分:2)
您基本上需要通过ServletContext#getRealPath()
将相对Web路径转换为绝对磁盘文件系统路径。
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文件。