2012-06-12 12 views
11

E 'possibile ottenere il nome di un file scaricato con HttpURLConnection?HttpURLConnection nome file scaricato

URL url = new URL("http://somesite/getFile?id=12345"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.setAllowUserInteraction(false); 
conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.connect(); 
InputStream is = conn.getInputStream(); 

Nell'esempio di cui sopra non riesco a estrarre il nome del file dall'URL, ma il server mi manderò il nome del file in qualche modo.

+0

Fantastic question.Whenever cerchiamo di identificare il nome del file ottenuto durante l'attività fisica richiesta di URL al volo, questo caso d'uso sarà significativo ... – sskumar86

risposta

14

Si potrebbe utilizzare HttpURLConnection.getHeaderField(String name) per ottenere il Content-Disposition intestazione, che viene normalmente utilizzato per impostare il nome del file:

String raw = conn.getHeaderField("Content-Disposition"); 
// raw = "attachment; filename=abc.jpg" 
if(raw != null && raw.indexOf("=") != -1) { 
    String fileName = raw.split("=")[1]; //getting value after '=' 
} else { 
    // fall back to random generated file name? 
} 

Come altra risposta ha sottolineato, il server potrebbe restituire il nome di file non valido, ma si potrei provarlo

+0

Grazie, questo particolare server sembra inviare Content-Disposition per ogni file richiesto tramite i parametri get. Per i collegamenti diretti, analizzerò solo l'url. – capitano666

+0

Dopo aver recuperato il nome file dall'intestazione, Da dove scaricare quel file? Dove sarà il file? Per favore aiutatemi. Grazie. – Dharmendra

+0

@Dharmendra È possibile utilizzare [URLConnection.getInputStream()] (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()) per ottenere lo stream di input e scrivi su file. –

4

La risposta esplicita è - a meno che il server Web non restituisca il nome file nell'intestazione Content-Disposition, non ci sia un vero nome file. Forse potresti impostarlo sull'ultima porzione dell'URI dopo/e prima della stringa di query.

Map m =conn.getHeaderFields(); 
if(m.get("Content-Disposition")!= null) { 
//do stuff 
} 
+0

Il server invia il nome del file, in qualche modo, infatti se io uso lo stesso link su un browser web mi viene offerto di salvare il file e ha un nome. Solo non so come recuperarlo. – capitano666

+1

Bene, allora sono sicuro che lo snippet qui sotto aiuterà! –

0

Verificare la Content-Disposition: intestazione allegato nella risposta.

0
Map map = connection.getHeaderFields(); 
      if (map.get ("Content-Disposition") != null) 
      { 
       String raw = map.get ("Content-Disposition").toString(); 
       // raw = "attachment; filename=abc.jpg" 
       if (raw != null && raw.indexOf ("=") != -1) 
       { 
        fileName = raw.split ("=")[1]; // getting value after '=' 
        fileName = fileName.replaceAll ("\"", "").replaceAll ("]", ""); 
       } 
      } 
Problemi correlati