2010-05-25 64 views
3

我使用Apache共同文件上傳庫使用Netbeans 6.8 + Glassfish.I'm試圖改變當前的上傳路徑是在servlet的當前上下文路徑,像這樣: WEB-INF /上傳如何使用Apache Common fileupload爲上傳的文件設置路徑爲「上下文路徑」?

所以我寫了:

File uploadedFile = new File("WEB-INF/upload/"+fileName); 
session.setAttribute("path",uploadedFile.getAbsolutePath()); 
item.write(uploadedFile); 

,但我注意到,該庫將上傳文件到GlassFish的文件夾,在這裏我所得到的,當我打印上傳文件的絕對路徑:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

我的問題:

  • 我怎麼能強迫共同文件上傳保存相對於當前的servlet路徑的路徑在上傳的文件,所以我並不需要指定整個路徑?這可能嗎 ?

回答

7

java.io.File行爲的本地磁盤文件系統上,並知道絕對沒有關於它的運行環境。你不應該指望它來尋找「正確」的位置,當您傳遞一個相對網絡路徑。這將相對於當前工作目錄,這取決於您如何啓動環境。你不想依賴那個。

您可以使用ServletContext#getRealPath()將相對網絡路徑轉換爲絕對本地磁盤文件系統路徑。

String relativeWebPath = "/WEB-INF/uploads"; 
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath); 
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName())); 
// ... 

這就是說,我希望你知道,部署文件夾不是上傳文件的正確位置,應該永久保存。重新部署webapp時,一切都會丟失。又見How to write a file to resource/images folder of the app?

相關問題