2012-06-12 13 views
11

Ist es möglich, den Namen einer Datei mit HttpURLConnection heruntergeladen bekommen?HttpURLConnection heruntergeladen Dateiname

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

In dem obigen Beispiel ich nicht die Dateinamen aus der URL extrahieren kann, aber der Server wird mir die Dateinamen in irgendeine Weise senden.

+0

Fantastische question.Whenever wir versuchen, die Dateinamen, während der Ausübung URL-Anfrage on the fly erhalten zu identifizieren, dieser Anwendungsfall von Bedeutung sein wird ... – sskumar86

Antwort

14

Sie HttpURLConnection.getHeaderField(String name) verwenden könnten die Content-Disposition Header zu erhalten, die die Dateinamen setzen normalerweise verwendet wird:

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? 
} 

Wie andere Antwort darauf hingewiesen, möglicherweise ungültige Dateinamen zurückgeben der Server, aber Sie könnte es versuchen.

+0

Danke, dieser bestimmte Server scheint Content-Disposition für jede Datei zu senden, die über get-Parameter angefordert wird. Für direkte Links werde ich nur die URL analysieren. – capitano666

+0

Nach dem Abrufen des Dateinamens aus der Kopfzeile, Von wo die Datei herunterladen? Wo wird die Datei sein? Bitte hilf mir. Vielen Dank. – Dharmendra

+0

@Dharmendra Sie können [URLConnection.getInputStream()] (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()) verwenden, um den Eingabestream und In Datei schreiben. –

4

Die offene Antwort ist - es sei denn, der Web-Server gibt den Dateinamen im Content-Disposition-Header zurück, es gibt keinen echten Dateinamen. Vielleicht könnten Sie es auf den letzten Teil des URI nach dem/und vor dem Abfrage-String setzen.

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

Der Server die Dateinamen in irgendeine Weise sendet, in der Tat, wenn ich benutze den selben Link in einem Webbrowser Ich werde angeboten, die Datei zu speichern und sie hat einen Namen. Ich weiß einfach nicht, wie man es holt. – capitano666

+1

Nun, dann bin ich mir sicher, dass das folgende Snippet helfen wird! –

0

Suchen Sie nach der Content-Disposition: Anhang Header in der Antwort.

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