Name der Download-Datei ermitteln

PRyba

Mitglied
Ich hab' da ein kleines Problem mit dem Downloaden von Dateien...
URL prüfen, den Stream heraussuchen und in eine lokale Datei übertragen ist nicht das Problem!
Für mich geht's um den Dateinamen!

Beispiel:
Geht man auf die Main-Website von aktuellen Browsern kriegt man
spezielle Links serviert...
um den aktuellen Firefox zu bekommen, klickt man einfach auf...

http://download.mozilla.org/?product=firefox-3.5.6&os=linux&lang=de

Und wenn ich nun solche Links serviert bekomme, und der Download geklappt hat,
wie finde ich dann heraus, wie der Originalname der heruntergeladenen Datei ist/war?

Es gibt Pakete wie Apache HttpClient, die das hinkriegen, aber ich wollte
auf zusätzliche Pakete verzichten...

Hat jemand einen Tipp????:L
 

PRyba

Mitglied
Mir stehen zwar ein paar Objekte vor und nach dem Download zur Verfügung, aber keines liefert mir den Originalnamen zurück (zumindest soweit ich weiß)....

Java:
HttpURLConnection
URL

Irgendwie muss es doch gehen, oder?!
 

sence

Bekanntes Mitglied
mit welcher Methode bzw Stream lädst du dir das File herunter ?
mir schwebt der gedanke an die Metadaten vor, jenachdem welche Methode / Object / Stream dafür benutzt wird.

kannst du kurz mal den Ausschnitt hier hinein schreiben mit welcher du dir das File holst ?
 

PRyba

Mitglied
Also, hier ist ein Teil des Codes, mit dem ich interessante Daten erhalte und auch die Datei ausgeben kann!

Java:
URL url = new URL( "http://www.tutego.com/index.html" ); 
HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
System.out.println( con ); 
System.out.println( "Date            : " + new Date(con.getDate()) ); 
System.out.println( "Last Modified   : " + new Date(con.getLastModified()) ); 
System.out.println( "Content encoding: " + con.getContentEncoding() ); 
System.out.println( "Content type    : " + con.getContentType() ); 
System.out.println( "Content length  : " + con.getContentLength() );

url = new URL("http://download.mozilla.org/?product=firefox-3.5.6&os=linux&lang=de");
con = (HttpURLConnection)url.openConnection();
HttpURLConnection.setFollowRedirects(false);
con.connect();

System.out.println(con);
for (String data : con.getHeaderFields().keySet()) {
  System.out.println(data + ": " + con.getHeaderField(data));
}

BufferedReader in = new BufferedReader(
              new InputStreamReader(
               con.getInputStream()));
String inputLine;
		
while ((inputLine = in.readLine()) != null) 
System.out.println(inputLine);
in.close();
		
con.disconnect();

Der Code funktioniert bei mir tadelos! Nur finde ich eben nicht heraus wie die Datei heißt, die ich herunterladen KÖNNTE (in diesem Code wird der empfangene Stream einfach auf dem Bildschirm ausgegeben; man kann ihn aber auch problemlos in eine Datei leiten)!

Ich hoffe, dieser Code hilft Euch mir zu helfen!
 

Triebi

Aktives Mitglied
Ich hab' mir das mal mit einem DM angesehen.
Bei http://download.mozilla.org/?product=firefox-3.5.6&os=linux&lang=de kommt ein
Code:
HTTP/1.1 302 Found
zusammen mit
Code:
Location: http://mozilla-mirror.3347.voxcdn.com/pub/mozilla.org/firefox/releases/3.5.6/linux-i686/de/firefox-3.5.6.tar.bz2
Ich weiß aber, was du meinst, es gibt da noch einen Header dafür...
Code:
Content-Disposition
könnte es sein, ich finde jedenfalls nix, das besser passt: List of HTTP headers - Wikipedia
Mit dem Firefox-Download hast du dir wohl das falsche Beispiel ausgesucht, aber wahrscheinlich muss eh' auf beide Header-Fields geprüft werden, um den Dateinamen zu bekommen.

PS: Programme & andere Binärdaten solltest du übrigens nicht unbedingt via BufferedReader einlesen. Das gibt nur Unsinn.
 

PRyba

Mitglied
Das ist wirklich interessant...
Normalerweise sollte ich doch mit meinem Java-Code ebenfalls den Location-Header empfangen, aber
stattdessen sieht die Ausgabe für den Firefox-Link plus aller Header-Daten so aus:

Code:
sun.net.www.protocol.http.HttpURLConnection:http://download.mozilla.org/?product=firefox-3.5.6&os=linux&lang=de
null: HTTP/1.1 200 OK
ETag: "2fa06-938584-479b89e712080"
Content-Language: pt
Date: Mon, 04 Jan 2010 12:35:17 GMT
Content-Length: 9667972
Last-Modified: Wed, 02 Dec 2009 06:02:26 GMT
Keep-Alive: timeout=2, max=100
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Type: application/x-bzip2
Server: Apache

Schaffst Du's mit Java-Code an den Location-Header zu kommen? Wenn ja, dann wär das schon mal ein wichtiger Einstiegspunkt für mich!

Die Liste der HTTP Header bin ich auch schon durch... muss aber zugeben, dass ich bisher
Code:
Content-Disposition
außen vor gelassen habe. Danke für den Tipp!

Und was den BufferedReader angeht, hast Du natürlich Recht...
in meinem "richtigen" Code schick' ich den InputStream direkt in ein RandomAccessFile! Klappt super damit!

Thx für die bisherige Hilfe... ich hoffe, Du kannst mir noch den entscheidenden Tipp liefern!?
 

eso

Mitglied
Du musst an den HTTP 302 ran kommen. Ich weiss jetz nicht ob dein
Java:
HttpURLConnection.setFollowRedirects(false);
funktioniert. Ich mache es mit
Java:
conn = (HttpURLConnection)url.openConnection();
conn.setInstanceFollowRedirects(false);
Damit solltest du nicht automatisch weiter geleitet werden, sondern kannst die "Location" abfragen. Etwa so:
Java:
		        if(conn.getResponseCode()==302 || conn.getResponseCode()==301)
		        {
		        	String newUrl=conn.getHeaderField("Location");
		        	if(newUrl.startsWith("/"))
		        	{
		        		newUrl=url.getProtocol() + "://" + url.getHost() + newUrl;
		        	}

		        	this.url=new URL(newUrl);

		        }
Das ganze muss in eine Schleife, da man u.U. mehrmals weitergeleitet wird
 

PRyba

Mitglied
Du hast einen Volltreffer gelandet... Herzlichen Dank!

Die globale Methode von HttpURLConnection zeigt keinen Effekt...

Java:
HttpURLConnection.setFollowRedirects(false);

aber die Methode für Instanzen klappt problemlos bei diesen Links

Java:
conn = (HttpURLConnection)url.openConnection();
conn.setInstanceFollowRedirects(false);

Das war der entscheidende Hinweis!!! Kollege, du bist ein Genie!

Im Grunde würde ich das Thema abschließen, aber mich interessiert noch ob das normal ist, dass die Instanzmethode funktioniert, aber nicht die statische Methode, die eigentlich für sämtliche HttpURLConnection-Objekte gelten sollte!

Oder ist es ein Bug?!

P.S.: Auch einen Dank an alle anderen, die zur Lösungsfindung beigetragen haben!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Kann VM nicht ueber Host Name finden Netzwerkprogrammierung 0
W DNS Name auf Vorhandensein überprüfen Netzwerkprogrammierung 5
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
S Client Name in Citrix Sitzung Netzwerkprogrammierung 2
U Name eines Netzlaufwerks ermitteln Netzwerkprogrammierung 5
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
J Datei Download vom Server Netzwerkprogrammierung 8
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
T Download überprüfung... Netzwerkprogrammierung 9
S HTTP Download von Google-URL mit Parametern Netzwerkprogrammierung 1
S download PDF Netzwerkprogrammierung 2
V Datei Download Fenster Netzwerkprogrammierung 9
R Apache HttpClient File Download? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T Download Programm - Download endet vorzeitig (bricht ab) Netzwerkprogrammierung 11
D HTTP Download - Skript im Weg Netzwerkprogrammierung 4
C Fehler bei PDF-Download Netzwerkprogrammierung 5
B FTP *.class download Netzwerkprogrammierung 2
eLogic Download eines Links Netzwerkprogrammierung 2
Dit_ FTP Download | "PassiveMode"-Socket öffnen Netzwerkprogrammierung 4
B HTTP Audio-Download per Direktlink Netzwerkprogrammierung 4
eLogic Download aus Internet Netzwerkprogrammierung 18
M Download von Webseite Netzwerkprogrammierung 4
A RMI Fortschritt bei Up/Download anzeigen Netzwerkprogrammierung 6
T Up- und Download mit https Netzwerkprogrammierung 14
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B HTTP PDF Servlet download vom Server zum Client Netzwerkprogrammierung 3
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
Schandro Download von FTP Server mit maximal Geschwindigkeit Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
ModellbahnerTT Download progress Netzwerkprogrammierung 4
D FTP Download Netzwerkprogrammierung 5
N Video download Netzwerkprogrammierung 4
hdi Webseite auf Download-Links prüfen und Download starten? Netzwerkprogrammierung 7
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
B FTP - Verzeichnis Download Netzwerkprogrammierung 3
A Download-Client Netzwerkprogrammierung 6
A download programm Netzwerkprogrammierung 2
K http-download Netzwerkprogrammierung 12
2 Redirect, Login und Download bei Rapidshare.com Netzwerkprogrammierung 4
L file upload / download über http Netzwerkprogrammierung 5
M Download über URL Netzwerkprogrammierung 7
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
N Download HTTP .php-Seite mit Anmeldung Netzwerkprogrammierung 5
I rmi und download von klassen Netzwerkprogrammierung 12
M Download-Manager in System/Browser einbinden Netzwerkprogrammierung 11
G file download über https mit p12 Zertifikat Netzwerkprogrammierung 4
P Download funtioniert nicht richtig. Netzwerkprogrammierung 2
M FTP Verbindung und download von *.txt Netzwerkprogrammierung 6
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18

Ähnliche Java Themen

Neue Themen


Oben