如何知道url後面的文件名(不解析url和「/」)。例如:在Java中獲取友好URL後面的文件名
如果你訪問這個網址與瀏覽器:
http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts
它解析爲「Ubuntu的12.04桌面-i386.iso」。我怎樣才能檢索這個文件名在Java下載文件的原始名稱?
感謝
如何知道url後面的文件名(不解析url和「/」)。例如:在Java中獲取友好URL後面的文件名
如果你訪問這個網址與瀏覽器:
http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts
它解析爲「Ubuntu的12.04桌面-i386.iso」。我怎樣才能檢索這個文件名在Java下載文件的原始名稱?
感謝
您可以簡單地連接到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();
可以使用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,那麼你也必須處理這個重定向。在這種情況下,您幸運的是提供了一個名稱 - 可能不會有爲的文件名,因爲數據不一定來自文件。但是,如果您的工具環境相對受限,這可能不成問題。
謝謝您的回答。 fooConnection.getHeaderField(「Location」)行返回null =( – Addev
已更新,其中包含一個示例 – anonymous
是的,foo參數也是這個url的對吧? – Addev