Announcement

Collapse
No announcement yet.

Name der Download-Datei ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Name der Download-Datei ermitteln

    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...=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?

  • #2
    Der Link funktioniert nicht.

    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?
    In welchem Rahmen willst du das wissen? Den Download macht der Browser. Was willst du da mit Java?


    URL prüfen, den Stream heraussuchen
    Was könnte damit gemeint sein?
    Ev. meinst du ja

    http://java.sun.com/j2se/1.4.2/docs/...a/net/URL.html

    und den dortigen Inputstream, der ein Download des Content ermöglicht. Ggf. schau dir da mal getFile() an


    Insofern ist mir die Frage und das Problem unklar?
    Christian

    Comment


    • #3
      Der Link funktioniert nicht.
      Das Forum hat mir scheinbar den Link gestutzt... kein Problem!
      Einfach auf die Seite http://www.mozilla-europe.org/de/firefox/ gehen...
      dort sollte der Link verfügbar sein, um Firefox abzuholen!

      In welchem Rahmen willst du das wissen? Den Download macht der Browser. Was willst du da mit Java?
      Hat was mit 'nem selbstimplementierten Download Manager zu tun!...

      Was könnte damit gemeint sein?
      Ev. meinst du ja

      http://java.sun.com/j2se/1.4.2/docs/...a/net/URL.html

      und den dortigen Inputstream, der ein Download des Content ermöglicht. Ggf. schau dir da mal getFile() an


      Insofern ist mir die Frage und das Problem unklar?
      Hab' schon befürchtet, dass es Probleme beim Verständnis des Problems gibt... ist auch nicht selbstverständlich!

      Anderes Beispiel:

      Nehmen wir mal den Link http://www.google.de...
      Aus diesem Link heraus kann man wohl kaum herausfiltern, welche Datei auf dem entsprechenden Webserver zurückgegeben wird!

      Hier geht es nur um eine HTML-Datei, die standardmäßig zurückgegeben wird, wenn beim Webserver eine Anfrage eingeht ohne Angabe einer Datei(normalerweise index.html)

      Ein ähnlicher Fall liegt bei dem Link auf der angegebenen Firefox-Site vor!
      Am Ende des Links befinden sich Parameter (?product...), die einen Redirect auf eine andere Site bewirken...
      Leider kann ich eben nicht herausfinden, wie dieser Link lautet!

      Manchmal reicht es einfach die Header der ersten HTTP-Anfrage anzuschauen, um den HTTP-Header "Location" herauszufiltern... und schon hat man den Originallink!

      Hier ist das anders!

      Klingt schwierig, ist es auch!

      Bin für jede Hilfe dankbar!

      Comment


      • #4
        Hat was mit 'nem selbstimplementierten Download Manager zu tun!...
        Hattest du das irgendwo erwähnt?? Die Hellseherkugel ist zum polieren weg.

        Nehmen wir mal den Link http://www.google.de...
        Es ist eine Einstellung des Webservers, welches die "welcome" Seiten sind, auf die OHNE Angabe des vollständigen URL weitergeleitet wird


        Bin für jede Hilfe dankbar!
        Es wird dir keiner weiterhelfen können, wenn du nicht sagst WIE du das machst. Wenn du es mit der URL-Klasse machst, siehe dir getFile() an. Was ergibt das?
        Christian

        Comment


        • #5
          Hattest du das irgendwo erwähnt?? Die Hellseherkugel ist zum polieren weg.
          Ich kann Dir mal meine leihen...

          Mit Worten lässt sich das einfach nicht erklären, da liegt wohl das Problem!
          Dann eben mit Code!

          Code:
          	URL url = new URL("http://download.mozilla.org/?product=firefox-3.5.6&os=linux&lang=de");
          	HttpURLConnection 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));
          	}
          		
          	con.disconnect();
          Mit diesem Codeabschnitt krieg' ich folgende Daten serviert...

          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
          "Normalerweise" reicht es per url.getFile() den Dateinamen herauszukriegen... in diesem Fall bekommt man nur die Parameter serviert. (/?product=firefox...)! Damit lässt sich aber nix anfangen!!!
          Wie komm' ich nun an den Name "firefox-3.5.6.tar.bz"? (Hängt aber auch wieder vom Betriebssystem ab!)

          Comment


          • #6
            Indem Fall wird der Download wohl gestreamt und sollte in der Art

            resStream.setHeader("Content-disposition","inline; filename=Firefox.exe");

            den Dateinamen setzen.

            Würde hier dann tatsächlich mal einen anderen HTTP-Client probieren, ob damit der Filename ausgelesen werden kann


            Leih mir mal die Kugel für die Lottozahlen.....
            Zuletzt editiert von Christian Marquardt; 04.01.2010, 15:27.
            Christian

            Comment


            • #7
              Danke für den Hinweis, aber das Problem lag woanders...
              In einem anderen Forum bekam ich den entscheidenden Hinweis!

              Die globale Methode

              Code:
              HttpURLConnection.setFollowRedirects(false);
              zeigte keine Wirkung. Durch den Einsatz einer Instanzmethode

              Code:
              conn = (HttpURLConnection)url.openConnection();
              conn.setInstanceFollowRedirects(false);
              bekam ich auf einmal die Redirect-Site mit dem Header "Location", wo der "echte" Link versteckt war!

              Es bleibt nur noch eine kleine Frage offen...
              Ist das normal, dass die globale Methode, die eigentlich für alle HttpURLConnection-Instanzen gelten sollte, nicht funktioniert ODER ist es ein Bug!?

              Comment

              Working...
              X