2011-03-14 30 views
2

我在Java應用程序中通過I/O流式傳輸下載各種文件。只要我有完整的URL路徑(包括文件名),接收並保存這些文件就行得通,但我怎樣才能找到某個域的索引文件的名稱(例如Apache的DirectoryIndex中定義的)? HTTP標頭不提供此信息,URLConnection方法也不提供此信息。如何找出Web服務器顯示的默認頁面的名稱?

非常感謝!

很好
S.

回答

5

據我所知,應該沒有檢索此信息的方式。 HTTP規範沒有提供,我認爲這不是一件壞事。您的客戶請求URL「/」,這取決於Web服務器如何處理,沒有義務返回文件名。

這也是值得指出的(我敢肯定,你知道的,但以防萬一),僅僅因爲一個URL看起來像/somedir/somefile.html,但這並不意味着這是屬下的實際文件。它可以通過代理服務器到另一個主機,mod_rewrite等 - 換句話說,這個名字是任意的,並且不一定與磁盤上的物理名稱有任何關係。

總之,我認爲你最好的選擇是選擇默認的文件名,例如index.html這些情況下堅持下去。

+0

謝謝,Phill。我以某種方式期望我會需要這樣一種解決方案。 – stpn108 2011-03-14 16:16:01

1

唯一的出路是:

  1. 檢查內容處理標頭,並用它來生成文件名。如果服務器正在提供一個文件,它會設置這個頭文件。例如。 http://server:port/DownLoadServlet URL可能會將此標頭設置爲「name.pdf」。
  2. 如果缺少此標題,請使用Heuristics生成文件名。這是瀏覽器用於生成文件名的文件,如Doc [10] .pdf Doc [12] .pdf等。
  3. 使用內容類型標頭(如果可用)猜測文件擴展名。
相關問題