2012-02-06 102 views
2

我正在使用Java和JSF的Glassfish 3容器。 在我的Web应用程序中,我试图实现一个文件(图像)管理系统。处理/访问磁盘上的文件

我有一个config.properties文件,我从中读取上传图像应该保存的路径。

save.file.path.event = D:\\upload 

文件上传作品,所有的文件都在自己的位置,但是当我尝试列出的图像浏览器说,没有图像可以找到。

<img src = "D:/upload/img1.png" /> 

Web服务器位于完全不同的分区中。

除了没有图像发现问题我有一个关于这方面的良好做法以下问题:如果他们的将是一个时候,我会在Web服务器上发布的应用程序如何安全/正确的方法是使用像路径D:\\upload?我想到的一些问题是操作系统之间的差异或分区名称的不确定性。

回答

1

看来,有两种方法可以解决这个问题

1.将文件在应用程序

如果应用程序名称为MyApplication,您可以指定喜欢MyApplication/uploads/ images和文件的路径将被保存在实际的应用程序中。这种方法的缺点是,在每次重新部署或热部署时,这些文件都将被删除。

2.将Web容器配置

的绝对路径Tomcat的去:../ Apache Tomcat x.x.xx/conf/server.xml有写:

<Context path="/web_uploads" docBase="C:/uploads/"/> 

对于Glassfish的去:sun-web.xml文件写:

<sun-web-app> 
    <property name="alternatedocroot_1" value="from=/uploads/* dir=C:"/> 
</sun-web-app> 
2

您正在尝试使用本地路径引用图像。请记住,Web浏览器(在客户端机器上)正在解析该img标签,因此它将在它自己的文件系统而不是服务器的文件系统上查看该位置。您需要将链接指向您的服务器正在为其提供映像的网址。例如http://server/upload/img1.png

+0

谢谢!但是,上传路径应该如何呢?我不认为像'D:\\ upload'这样的东西是最好的方法。 – Ionut 2012-02-07 07:20:09

+0

把它放在本地文件系统上任何你想要的地方,只要它把web服务器上的那个文件夹提供给“web”即可。 – Jon7 2012-02-07 18:24:52

+0

我该怎么做?是不是也有可能将上传文件夹放在应用程序中,只是提供一个相对路径到文件夹 – Ionut 2012-02-07 19:16:44