在JSP中上传和保存文件

时间:2012-08-13 21:48:06

标签: java spring hibernate jsp file-upload

我正在尝试使用带有Spring / hibernate的Apache Common FileUpload在JSP中上传图像。上传图像效果很好。 我的项目文件夹位于以下路径。

E:\Project\SpringHibernet\wagafashionNew\wagafashion

解析请求后,我正在尝试将上传的图像保存到以下文件夹中。

E:\Project\SpringHibernet\wagafashionNew\wagafashion\web\images

我已经尝试过多种方式来获得这条路,但我无法成功。

指定类似以下内容的相对路径

File f=new File("wagafashion/web/images/image_file.xxx");

无效。

有没有办法检索以下路径?

E:\Project\SpringHibernet\wagafashionNew\wagafashion\web\images

或指定new File("relative_file_path")构造函数的相对路径?

我是否将文件保存到错误的目录中?在那种情况下,要保存项目文件夹文件?

1 个答案:

答案 0 :(得分:3)

可能。

向ServletContext询问getRealPath(“/ web / images”)的一种方法,看看是否返回了一些东西 - 它没有,但它可能会。如果是,那么你可以将图像放在那里。

然而

如果您像大多数人一样使用WAR进行部署,那么一旦重新部署,所有这些图像都将会消失,因为大多数容器都会部署WAR并将其分解到文件系统。在您执行此操作之前目录中的任何内容(即上次部署时的代码和工件)将再见,因此您将“丢失”您的图像。

您可以通过执行目录部署来缓解这种情况,即部署已经展开的目录。然后你知道应用程序的位置(因为你把它放在那里)。然后,您可以在进行更改时将该目录与新代码同步(特别是您可以删除不再需要的旧内容)。

除此之外,不同的容器具有不同的机制,用于在外部目录中映射到应用程序空间。 Glassfish具有您可以使用的“备用doc根”的概念。这允许您在部署的一侧放置静态内容并且仍可由容器提供服务,但在重新部署时不会被删除。

最后,你总是可以自己做,流式传输你自己的图像等,而不依赖于容器。这样,您就可以将图像放在文件系统,数据库中,内存中等等。