2012-02-06 72 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