我正在尝试使用带有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")
构造函数的相对路径?
我是否将文件保存到错误的目录中?在那种情况下,要保存项目文件夹文件?
答案 0 :(得分:3)
可能。
向ServletContext询问getRealPath(“/ web / images”)的一种方法,看看是否返回了一些东西 - 它没有,但它可能会。如果是,那么你可以将图像放在那里。
然而
如果您像大多数人一样使用WAR进行部署,那么一旦重新部署,所有这些图像都将会消失,因为大多数容器都会部署WAR并将其分解到文件系统。在您执行此操作之前目录中的任何内容(即上次部署时的代码和工件)将再见,因此您将“丢失”您的图像。
您可以通过执行目录部署来缓解这种情况,即部署已经展开的目录。然后你知道应用程序的位置(因为你把它放在那里)。然后,您可以在进行更改时将该目录与新代码同步(特别是您可以删除不再需要的旧内容)。
除此之外,不同的容器具有不同的机制,用于在外部目录中映射到应用程序空间。 Glassfish具有您可以使用的“备用doc根”的概念。这允许您在部署的一侧放置静态内容并且仍可由容器提供服务,但在重新部署时不会被删除。
最后,你总是可以自己做,流式传输你自己的图像等,而不依赖于容器。这样,您就可以将图像放在文件系统,数据库中,内存中等等。