2010-09-14 56 views
0

我正在寫一個上傳和下載功能,並試圖讓這兩種方法寫入或從同一文件夾中讀取,我遇到了一些問題getResourceAsStream。 (該軟件在GlassFish上運行)問題與getResourceAsStream

上傳:該方法上傳到該文件夾​​:/home/phamtn8/glassfishv3/glassfish/domains/domain1/applications/Documents/Documents-war_war/drawings/Liandro.jpg - >工作的偉大

下載:流= the above path

input = this.getClass().getResourceAsStream(stream); //這回空

包含這些上傳和下載方法的類文件的位置位於: /home/phamtn8/glassfishv3/glassfish/domains/domain1/applications/Documents/Documents-war_war/WEB-INF/classes/org/xdrawing/web。如果我把jpg文件放在這裏,getResourceAsStream工作。

注:this.getClass.getName()返回org.xdrawing.web.FileName

請幫助!

+2

存放東西到你的類路徑是一個非常奇怪的和錯誤的事情去做。如果有人上傳班級文件會發生什麼?它會被添加到你的類路徑中!最好將它們存儲在專用於存儲文件的區域。 – 2010-09-14 20:32:09

+0

謝謝。現在就做。 – 2010-09-14 20:36:14

回答

7

getResourceAsStream(..)處理來自類路徑根目錄的路徑。而你的似乎是機器的根源。因此改爲使用new FileInpuStream(fullPath)

實際上,還有另一個getResourceAsStream方法屬於ServletContext。它處理來自Web應用程序根目錄的路徑,並且更適合於Web應用程序。 (你的web應用程序的根是Documents-war_war/

但隨着文件上傳和下載最好的做法是將它們存儲在您的Web應用程序是完全不同的位置 - 比如說/home/appname/uploads,使您可以部署和取消部署web應用程序,而不丟失任何數據。你只需要指向上傳的絕對位置的配置選項(在web.xml例如<context-param>),並使用FileInputStream方法(或OutputStream分別)

+0

真棒。謝謝+1 – 2010-09-14 20:34:38