Thomas: Download erzwingen

Hallo

Gibt es eine Möglichkeit dem Browser mittels HTML oder JS zu sagen, dass er den erwähnten Link zwingend als Downloaden soll? Habe ein Link auf ein JPG-Bild. Klickt jemand darauf, möchte ich, dass sich der Download-Dialog öffnet und nicht das das Bild im Browserfenster sich öffnet.

Wie mache ich sowas?

Danke für eure Tipps.

Gruss
Thomas

  1. Wie mache ich sowas?

    1. Du postest hier ein Teil des Codes
    2. Du suchst selber im Archiv oder im WWW
    3. Du deklarierst des Request-Header richtig
  2. 你好 Thomas,

    Gibt es eine Möglichkeit dem Browser mittels HTML oder JS zu sagen, dass er den erwähnten Link zwingend als Downloaden soll? Habe ein Link auf ein JPG-Bild. Klickt jemand darauf, möchte ich, dass sich der Download-Dialog öffnet und nicht das das Bild im Browserfenster sich öffnet.

    Nun, genau genommen wird jeglicher Inhalt heruntergeladen, bevor er angezeigt wird (wobei, inzwischen gilt: während er angezeigt wird).

    Wenn du meinst, du willst den Datei-Speichern-Dialog erzwingen: das geht nicht wirklich. Du kannst es zwar versuchen, in dem du Header wie

    Content-Disposition: file; filename=dateiname

    sendest, aber ob der Browser dann auch wirklich den Dialog anzeigt, kannst du nicht beeinflussen.

    再见,
     克里斯蒂安

    1. Mahlzeit Christian Kruse,

      Du kannst es zwar versuchen, in dem du Header wie

      Content-Disposition: file; filename=dateiname

      sendest, aber ob der Browser dann auch wirklich den Dialog anzeigt, kannst du nicht beeinflussen.

      Als Ergänzung hierzu:

      Da Thomas' Frage war, ob man "mittels HTML oder JS" das Speichern erzwingen könnte, müsste die Antwort darauf korrekterweise "Nein" lauten ... man muss schon Zugriff auf Konfigurationsmöglichkeiten des Webservers (direkt oder mittels einer serverseitigen Programmiersprache wie z.B. PHP o.ä.) haben, um entsprechende HTTP-Header senden zu können.

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Grüße,

        Da Thomas' Frage war, ob man "mittels HTML oder JS" das Speichern erzwingen könnte, müsste die Antwort darauf korrekterweise "Nein" lauten

        außer man benennt die .jpg datei in etwas exotisches um (bild.f4kup) - mit sehr hoher wahrscheinlichkeit wird der browser versuchen es runterzuladen, sofern für die dateiendung kein programm zugewiesen ist?

        MFG
        bleicher

        1. Hallo,

          »» Da Thomas' Frage war, ob man "mittels HTML oder JS" das Speichern erzwingen könnte, müsste die Antwort darauf korrekterweise "Nein" lauten
          außer man benennt die .jpg datei in etwas exotisches um (bild.f4kup) - mit sehr hoher wahrscheinlichkeit wird der browser versuchen es runterzuladen, sofern für die dateiendung kein programm zugewiesen ist?

          bei diesem Vorschlag muss man zwischen Internet Explorer und dem Rest der Welt unterscheiden. Bei einer exotischen Dateiendung wird der Server wohl erstmal keine Idee haben, was für ein MIME-Typ da richtig sein könnte, also dürfte er application/octet-stream angeben.

          Ein Internet Explorer gibt traditionell nicht so viel auf MIME-Typen, sondern kuckt lieber auf die "Datei"-Endung (die er in diesem Fall auch nicht einordnen kann) oder analysiert sogar die ersten paar Bytes des Dateiinhalts. Mit großer Wahrscheinlichkeit stellt er also fest: Is'n JPEG-Bild. Und das zeigt er dann stolz an.
          Andere Browser vertrauen auf den MIME-Typ, kümmern sich weder um den Namen noch den Inhalt der Ressource, sondern fragen anständig nach, wo sie die Daten speichern sollen.

          So long,
           Martin

          --
          Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
            (George Bernhard Shaw)
    2. Moin.

      Wenn du meinst, du willst den Datei-Speichern-Dialog erzwingen: das geht nicht wirklich. Du kannst es zwar versuchen, in dem du Header wie

      Content-Disposition: file; filename=dateiname

      sendest [...]

      Bist du sicher, dass du nicht

      Content-Disposition: attachment; filename=dateiname

      meinst? Der Wert file ist mir in diesem Zusammenhang bisher noch nicht begegnet.

      Christoph

      1. 你好 Christoph,

        Bist du sicher, dass du nicht

        Content-Disposition: attachment; filename=dateiname

        meinst?

        Ja, selbstverständlich. Danke für die Verbesserung.

        再见,
         克里斯蒂安

  3. Moin.

    Gibt es eine Möglichkeit dem Browser mittels HTML oder JS zu sagen, dass er den erwähnten Link zwingend als Downloaden soll?

    Es gibt die Möglichkeit, dem Link ein type-Attribut mitzugeben:

      
    <a href="foo.jpg" type="application/octet-stream">foo</a>  
    
    

    Da der Mime-Type application/octet-stream unspezifizierte Binärdaten kennzeichnet, sollte der Browser die verlinkte Ressource zum Herunterladen anbieten.

    Das Problem dabei ist, dass Browser die Angabe entweder gar nicht beachten (IE, Opera) oder dem HTTP-Header Vorrang geben (siehe z.B. hier).

    Christoph