2012-12-08 5 views
5

Webサーバーからファイルをダウンロードし、サーバーがファイルと共に送信している元のファイル名でファイルを保存しようとしています。ダウンロードはうまく動作しますが、実際のファイル名を取得することはできません。httpダウンロードファイルからファイル名を取得

実際の例として、this file(Foxit PDF Reader)をダウンロードしようとしています。

このリンクをChromeのようなブラウザで使用している場合、ブラウザはバージョンなどの正確な名前でファイルをダウンロードします。この名前はどこから取得できますか?私はヘッダー情報を読もうとしましたが、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)] 

は、どのように私は正確なファイル名を取得することができます:あなたは出力で見ることができるように

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がある:

私はこのような何かを試してみましたか?ブラウザのリンクは、 FoxitReader544.11281_enu_Setup.exeという名前のファイルをダウンロードします。

どのようなアイデアですか?

答えて

3
GET /downloads/latest.php?product=Foxit-Reader HTTP/1.1 

HTTP/1.1 302 Found

の応答を与え、レスポンスヘッダ

Location: http://cdn04.foxitsoftware.com/pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe 

を設定し、最後に、あなたは

GET /pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe HTTP/1.1 

、発行ファイル名が来ているように見える場所であることから。 リダイレクトが透過的に行われている場合でも、依然としてrequestパラメータからファイル名を取得できます。

+0

うわー!私はGETが 'HTTP/1.1 200 OK'情報のためにOKだったと思いましたか?なぜ私は302を取得する必要があります200を得たか? – Marco

+3

パラメータが設定されている場合は、自動的にリダイレクトされます。 [** '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(boolean)) –

+0

ニース!どうもありがとうございました!受け入れるには2分以上待つ必要がある...;) – Marco

関連する問題