2012-02-14 85 views
1

我正在使用Apache Commons File Uploader API。當我使用絕對路徑c:\\my uploads\\時它正在成功工作。那是文件將被上傳到那個地方。如何將上傳的文件寫入web項目內的文件夾?

我正在使用NetBeans 7進行開發。在我的項目樹中,我創建了另一個名爲uploads的文件夾。所以當我使用像uploads//uploads/pics/這樣的相對路徑時,它不起作用。也就是說,沒有錯誤。但文件不會寫入該文件夾。我正在使用「File」對象並使用其「write()」函數。

我的項目文件夾結構是這樣的:

-- C:\ 
-- -- my project\ 
-- -- -- school\ 
-- -- -- -- web\ 
-- -- -- -- -- index.jsp 
-- -- -- -- -- fileupload.jsp 
-- -- -- -- -- uploads\ 
-- -- -- -- -- -- pics\ 

回答

2

你基本上需要通過ServletContext#getRealPath()的相對網絡路徑轉換爲絕對磁盤文件系統路徑。

String relativeWebPath = "/uploads"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
String filename = FilenameUtils.getName(item.getName()); 
File file = new File(absoluteDiskPath, filename); 
// ... 

但是,這種將上傳文件寫入擴展WAR文件夾的方法絕對不推薦。重新部署WAR時,所有這些上傳的文件都會丟失(僅僅因爲它們不包含在原始WAR中)。當服務器配置爲在內存中而不是在磁盤上擴展WAR時,它也不起作用。然後getRealPath()將返回null

將上傳的文件寫入展開WAR文件夾之外的路徑。你在第一個地方做對了。您始終可以通過將上載文件夾指定爲VM參數或屬性文件設置來配置上載文件夾。

最後但並非最不重要的一點,Java代碼屬於Java類而不是JSP文件。

+0

thanku。我將使用「C:\\ my uploads \\」作爲位置。但如何檢查文件夾是否存在?如果不存在,請創建一個。 'File'的對象包含'mkdir()'。但它不接受一條道路。所以我很困惑 – 2012-02-14 12:18:13

+0

只需在'new File(「C:/ my uploads」)中調用它即可。 – BalusC 2012-02-14 12:20:09

+0

thanku。我正在使用它。但我不知道它是這樣工作的。 – 2012-02-14 12:22:22

相關問題