1

我正在尝试使用带有 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")

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

4

1 回答 1

3

也许。

一种方法是让 ServletContext 获取 getRealPath("/web/images"),并查看它是否返回了某些东西——它不是必须的,但它可能会。如果是这样,那么您可以将图像放在那里。

然而。

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

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

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

最后,您始终可以自己做,流式传输自己的图像等,而完全不依赖容器。通过这种方式,您可以将图像放在文件系统、数据库、内存中等等。

于 2012-08-13T21:59:40.930 回答