如何将上传的文件写入Web项目中的文件夹?

时间:2012-02-14 11:58:38

标签: jsp file-upload path

我正在使用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\

1 个答案:

答案 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文件。