2017-06-10 50 views
0

我是Java新手,目前我正試圖將上傳的文件(使用servlet)存儲在項目中存在的文件夾中。在web.xml中,我可以選擇完整路徑,但完整路徑在其他人的計算機上會有所不同,並且不起作用,那麼如何將上傳的文件存儲在位於我正在使用的項目中的文件夾中。 我的web.xml看起來是這樣的:如何將上傳的文件存儲在Java項目文件夾中

<web-app> 
... 
<context-param> 
    <description>Location to store uploaded file</description> 
    <param-name>file-upload</param-name> 
    <param-value> 
     C:\Users\George\Desktop\dataFolder\ 
    </param-value> 
</context-param> 
... 
</web-app> 

但我想使道路看起來是這樣的:thisProject \ dataFolder

+0

不清楚你在問什麼。 –

+0

@MichaelMarkidis讓我和其他3人正在做某種項目。我們正在使用github。我的目標是在項目中有一個名爲data的文件夾,並且當某些內容上傳到網站上時(使用上傳表單)它將進入該數據文件夾。我能做到的唯一方法是將此文件夾的完整路徑設置爲web.xml,但事情是我朋友的文件夾完整路徑將不同(因爲他可能在不同的位置有他的日食),所以它不會工作。有什麼建議麼? – GeorgeDopeG

+0

不要在代碼中使用完整路徑 - 使用相對路徑。 –

回答

0

有幾種方法可以做到這一點,但要點是:

您使用絕對路徑並使其依賴於部署。

Webapps很特別,你不知道他們將在哪裏部署,你不能假設你的工作目錄太多,一旦部署就沒有項目文件夾

所以,如果你需要一個文件夾來放置上傳的文件,你只是假設你將有一個文件夾並使用參數來定位它。

如果你把這個參數放在web.xml中,你可以用服務器設置覆蓋它,你怎麼做取決於你正在使用的應用服務器。

另一種設置部署特定設置的方法是使用環境變量。所以你可以定義一個像MYAPP_FILESTORAGE這樣的環境變量,並在這個變量中設置文件上傳的實際路徑。在Eclipse中(我認爲其他IDE也有類似的機制),你可以爲應用程序RUN/DEBUG設置環境變量。

如果你不能在你的IDE中設置它,你仍然可以在你的操作系統中將它設置爲用戶變量或系統變量。

因此,在你的項目不會有一個hardocoded參考路徑,而是通過一個環境變量解決的邏輯引用。

每次你和你的朋友將只需要設置一次。

你也可以這樣的信息存儲在一個數據庫或使用容器的具體機制。

0

它與我自己製作這個精確的項目時遇到的問題相同。我做了什麼是我只在我的projectApp中創建了存儲目錄。它是myProject/WEB-INF/saveFiles。由於這一點,我的下載已不限於任何machine.I可以在我的Ubuntu/Windows/Mac的使用沒有任何問題。既然你已經知道你爲什麼不應該使用絕對路徑,讓前來solution.In你的servlet code.Assume您的存儲目錄爲FileStorage,和你的應用程序結構

myProject的 - > WEB- INF - > FileStorage

/* Get the directory location.myContextPath is the path of your 
     application. It will return "somepath/myProject/". */ 
     File storageDirectory=new File(request.myContextPath()+"/WEB-INF/FileStorage"); 

    //Now check if the directory is already created or not.If its not created,then it means your application is being run for the 1st time on this machine. 
    if(!storageDirectory.exists()) 
     storageDirectory.mkdir(); 

現在你已經有了一個獨立於平臺的存儲目錄。現在你可以繼續保存文件了。 注:它可以說,我爲什麼選擇FileStorage位置爲myProject的/ WEB-INF/FileStorage代替myProject的/ FileStorage。我這樣做是如此,因爲WEB-INF之外什麼都可以由用戶直接訪問只有WEB-INF內部的內容不能直接訪問。保留重要的東西要安全得多。

0

,當你的文件中的servlet字節使用FileOutputStream中使用Java

例如

部P = request.getpart( 「文件」),只寫它;

Inputstream is = p.getinputstram();

byte [] b = IOutils.getbytes(is);

FileOutputStream fos = null;

嘗試{ //創建新文件輸出流

FOS =新FileOutputStream中( 「C://test.txt」);

//寫入字節輸出流

fos.write(B);

//刷新內容底層流

fos.flush();

趕上(例外){// 如果發生錯誤,

ex.printStackTrace();

}

相關問題