【问题标题】:Uploading and saving files in JSP在 JSP 中上传和保存文件
【发布时间】:2012-08-13 21:48:06
【问题描述】:

我正在尝试使用带有 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") 构造函数指定相对路径?

我是否将文件保存到错误的目录中?那么项目文件夹文件要保存在哪个项目中呢?

【问题讨论】:

    标签: java spring hibernate jsp file-upload


    【解决方案1】:

    也许吧。

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

    但是。

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

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

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

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

    【讨论】:

    • 我可以做到,但方式很丑。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2019-01-02
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多