2012-12-08 11 views
5

Ich versuche, eine Datei von einem Webserver herunterladen und speichern Sie sie unter dem ursprünglichen Dateinamen, den der Server mit der Datei sendet. Das Herunterladen funktioniert sehr gut, aber ich kann den echten Dateinamen nicht finden.Abrufen des Dateinamens von HTTP-Download-Datei

Für ein echtes Beispiel versuche ich this file (Foxit PDF Reader) herunterladen.

Wenn ich diesen Link in einem Browser wie Chrome verwende, lädt der Browser die Datei mit einem genauen Namen einschließlich Version usw. Woher bekomme ich diesen Namen? Ich habe versucht, die Header-Informationen zu lesen und suchte nach Content-Disposition, aber der Server sendet diese Informationen nicht. Woher bekomme ich den genauen Dateinamen?

Ich habe versucht, so etwas wie dieses:

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()); 
} 

Wie Sie in der Ausgabe ist kein Content-Disposition dort sehen können:

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)] 

Wie kann ich den genauen Dateinamen abrufen? Der Link in einem Browser lädt eine Datei mit dem Namen FoxitReader544.11281_enu_Setup.exe herunter.

Irgendwelche Ideen ?!

Antwort

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

gibt eine Antwort von HTTP/1.1 302 Found

und stellt die Antwort-Header

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

und schließlich Sie Ausgabe,

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

Das ist, wo der Dateiname zu sein scheint kommenden von. So, Wenn die Umleitung transparent erfolgt, könnten Sie wahrscheinlich noch den Dateinamen aus dem Anforderungsparameter abrufen.

+0

Wow! Ich vermutete, dass das GET OK war wegen der HTTP/1.1 200 OK Information ?! Warum habe ich eine 200 bekommen, wenn ich eine 302 bekommen sollte ?! – Marco

+3

Es folgt Umleitungen automatisch, wenn der Parameter festgelegt ist. Siehe [** 'getFollowRedirects()' **] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#getFollowRedirects()) und [** ' setFollowRedirects() '**] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setFollowRedirects (boolean)) –

+0

Schön! Vielen Dank! Müssen warten noch 2 Minuten zu akzeptieren ...;) – Marco

Verwandte Themen