2012-05-01 57 views
3

如何知道url後面的文件名(不解析url和「/」)。例如:在Java中獲取友好URL後面的文件名

如果你訪問這個網址與瀏覽器:

http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts 

它解析爲「Ubuntu的12.04桌面-i386.iso」。我怎樣才能檢索這個文件名在Java下載文件的原始名稱?

感謝

回答

3

更高效方式:

您可以簡單地連接到URL,然後檢索您將被重定向到URL,通過執行以下操作:

URL foo = new URL("http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts"); 
HttpURLConnection fooConnection = (HttpURLConnection) foo.openConnection(); 
URL secondFoo = new URL(fooConnection.getHeaderField("Location")); 
fooConnection.setInstanceFollowRedirects(false); 
URLConnection fooURL = secondFoo.openConnection(); 
+0

謝謝您的回答。 fooConnection.getHeaderField(「Location」)行返回null =( – Addev

+0

已更新,其中包含一個示例 – anonymous

+0

是的,foo參數也是這個url的對吧? – Addev

3

可以使用HEAD請求動詞來嘗試發現數據;對於這個特定的文件(使用優秀LWP系列,基於Perl HTTP工具),你可以找到這樣的文件名:

$ HEAD -S 'http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts' 
HEAD http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts 
302 Moved Temporarily 
HEAD http://ubuntu.virginmedia.com/releases//precise/ubuntu-12.04-desktop-i386.iso 
200 OK 
Connection: close 
Date: Tue, 01 May 2012 22:54:56 GMT 
Accept-Ranges: bytes 
ETag: "1f83678-2bd4b000-c175d600" 
Server: Apache 
Content-Length: 735358976 
Content-Type: application/octet-stream 
Last-Modified: Mon, 23 Apr 2012 12:27:04 GMT 
Client-Date: Tue, 01 May 2012 22:54:54 GMT 
Client-Peer: 194.117.143.72:80 
Client-Response-Num: 1 

302標題顯示該對象已移動,流提供了一個新的URL檢索。大多數工具都會透明地處理這個重定向,如果你手寫HTTP,那麼你也必須處理這個重定向。在這種情況下,您幸運的是提供了一個名稱 - 可能不會有的文件名,因爲數據不一定來自文件。但是,如果您的工具環境相對受限,這可能不成問題。