2010-11-04 71 views
0

我正在使用基於Web的應用程序,其中包含servlet和JSP。我的要求是獲取在我的應用程序中上傳的文件的路徑。FilePart的getFilePath API無法按預期方式工作

利用,通過利用代碼來獲取文件名的遺留代碼 -

// FilePart類com.oreilly.servlet.multipart package.//的

FilePart filePart = (FilePart) part; 
    screenosInputFileName = filePart.getFileName(); 

的getFileName的以「a.txt」之類的字符串正確返回文件的名稱。因爲我也想要路徑,所以我正在使用getFilePath,如 - String path = filePart.getFilePath();

但是,我發現getFilePath只是返回文件名而不是文件路徑。也就是說,getFileName和getFilePath返回相同的值「a.txt」。我期待的getFilePath就像c:\ myfiles。 另外,我正在Ubuntu環境(linux風格)中運行我的應用程序。

任何想法爲什麼getFilePath只會重新調用文件名而不是文件路徑?以及如何克服這個問題。任何指針高度讚賞。

+0

你想從客戶端文件路徑?那麼你不能這樣做 – 2010-11-04 09:22:40

回答

0

注:我不熟悉com.oreilly.servlet.multipart.FilePart

如果FilePart表示客戶端上的文件,那麼它是不可能得到它的路徑(沒有理由讓服務器知道a.txt是否是從C:\Users\bob\/home/bob/Documents/上傳,讓信息不包括在內)。

如果FilePart表示服務器上的文件(如果你的服務器保存上傳的文件到一個臨時目錄,以便您可以訪問他們的實際文件),那麼你應該能夠使用它來獲取實際的路徑該文件:

String path = new File(filePart.getFilePath()).getAbsolutePath(); 

我希望這是有幫助的!

+0

'FilePath'是一個服務器組件......包名中的'servlet'在這裏是一個很大的提示。 – Powerlord 2010-11-04 13:37:33

+0

@Bemrose我明白這一點。但是,此服務器組件是否代表客戶端或服務器上的對象? – Jonathan 2010-11-04 13:47:02

0

它曾經是Internet Explorer將在客戶端的計算機上包含文件的完整路徑。我不知道它是否已經這樣做了,但我不這麼認爲,因爲這是一個隱私問題。服務器沒有業務知道完整路徑。

0

getFilePath只在客戶端使用Internet Explorer時才起作用,因爲它是唯一一個將整個文件路徑返回給服務器的瀏覽器。有機會,它只能在IE6上運行,因爲我相信當IE7推出時,MS終於意識到這不是一個好的安全實踐。

相關問題