我試圖從網絡服務器下載文件,並將其保存在服務器與文件一起發送的原始文件名下。下載工作得很好,但我無法獲得真正的文件名。從http下載文件中檢索文件名
對於實例,我試圖下載this file(福昕PDF閱讀器)。
如果我在Chrome等瀏覽器中使用此鏈接,瀏覽器下載包含版本等確切名稱的文件。我從哪裏獲得該名稱?我嘗試閱讀標題信息並正在搜索Content-Disposition
,但服務器不發送此信息。我從哪裏得到準確的文件名?
我想是這樣的:
try {
URL webfile = new URL("http://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader");
URLConnection con = webfile.openConnection();
Map map = con.getHeaderFields();
Set set = map.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (IOException ex) {
System.out.println("Error: "+ex.getMessage());
}
正如你可以在輸出看有沒有Content-Disposition
:
null=[HTTP/1.1 200 OK]
ETag=["244005-f36d40-4d003f3868000"]
Date=[Sat, 08 Dec 2012 12:29:02 GMT]
Content-Length=[15953216]
Last-Modified=[Tue, 04 Dec 2012 10:01:36 GMT]
Content-Type=[application/x-msdos-program]
Connection=[close]
Accept-Ranges=[bytes]
Server=[Apache/2.2.16 (Debian)]
那麼,怎樣才能檢索到確切的文件名?瀏覽器中的鏈接使用名稱FoxitReader544.11281_enu_Setup.exe
下載文件。
有什麼想法?
哇!我猜想GET是正確的,因爲'HTTP/1.1 200 OK'信息?!爲什麼我得到200,如果我應該得到302?! – Marco
如果設置了參數,它會自動跟隨重定向。參見[**'getFollowRedirects()'**](http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#getFollowRedirects())和[**' setFollowRedirects()'**](http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setFollowRedirects(布爾值)) –
不錯!非常感謝你!需要等2分鐘才能接受...;) – Marco