2012-12-08 15 views
5

Sto cercando di scaricare un file da un server web e salvarlo con il nome file originale che il server sta inviando con il file. Il download funziona molto bene, ma non riesco a ottenere il vero nome del file.Recupera nome file dal file di download http

Per un esempio reale sto cercando di scaricare this file (Foxit PDF Reader).

Se si utilizza questo collegamento in un browser come Chrome, il browser scarica il file con un nome esatto inclusa la versione ecc. Da dove viene visualizzato questo nome? Ho provato a leggere le informazioni dell'intestazione e stavo cercando il Content-Disposition ma il server non ha inviato questa informazione. Da dove viene il nome esatto del file?

Ho provato qualcosa di simile:

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

Come si può vedere in uscita non c'è 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)] 

Così come posso recuperare il nome del file esatto? Il collegamento in un browser scarica un file con il nome FoxitReader544.11281_enu_Setup.exe.

Qualche idea ?!

risposta

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

dà una risposta di HTTP/1.1 302 Found

e imposta l'intestazione della risposta

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

e, infine, si emette,

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

Questo è dove il nome del file sembra essere venuta a partire dal. Quindi, se il reindirizzamento avviene in modo trasparente, è comunque possibile ottenere il nome file dal parametro di richiesta.

+0

Wow! Ho indovinato che GET era Ok a causa delle informazioni su 'HTTP/1.1 200 OK' ?! Perché ho ricevuto un 200 se dovessi ottenere un 302 ?! – Marco

+3

Segue automaticamente i reindirizzamenti, se il parametro è impostato. Vedi [** 'getFollowRedirects()' **] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#getFollowRedirects()) e [** ' setFollowRedirects() '**] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setFollowRedirects (booleano)) –

+0

Bello! Grazie mille! Devi aspettare altri 2 minuti per accettare ...;) – Marco