sandsonne: .mp3 download erzwingen

Liebe Leser,

ich versuche mich nun seit Stunden daran, den Download einer .mp3 zu erzwingen. Ich habe nun schon soviele Internetseiten und auch Anleitungen gelesen und befolgt doch leider erfolglos. D.h. bei mir wird die Datein nicht heruntergeladen sondern im Browser abgespielt. Genau das, was ich nicht wollte.

ich habe es via Htaccess sowie via php versucht.

Von diesem Beitrag erhoffe oder wünsche ich mir, dass ein verständnisvoller und geduldiger Leser mir genau sagt, was ich machen muss. Step, by step.

Die mp3 liegt auf meinem ftp ebenso wie eine download.php mit folgendem Inhalt

<?PHP
$verzeichnis = "http://meineURL/Anzeige.mp3";
$datei = "Anzeige.mp3";
$dateiname = sprintf("%s/%s", $verzeichnis, $datei);
header("Content-Type: application/octet-stream");
$speicher_name = "Anzeige.mp3";
header("Content-Disposition: attachment; filename=\"".$speicher_name."\"");
readfile($dateiname);
?>

In der html test datei um den Downloadlink zu testen steht folgendes

<a rel="nofollow" href="download.php?file=Anzeige.mp3">herunterladen</a>

Was verstehe ich nicht? Wo stehe ich auf der Leitung?

Ich danke zunächst für das Lesen meines Beitrags und hoffe, Ihr könnt mir helfen.

Viele Grüße.

  1. Hallo sandsonne,

    ich versuche mich nun seit Stunden daran, den Download einer .mp3 zu erzwingen. Ich habe nun schon soviele Internetseiten und auch Anleitungen gelesen und befolgt doch leider erfolglos. D.h. bei mir wird die Datein nicht heruntergeladen sondern im Browser abgespielt. Genau das, was ich nicht wollte.

    Dafür gibt es das Attribut download.

    <a rel="nofollow" href="Anzeige.mp3" download>herunterladen</a>
    

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. Lieber Matthias,

      zuvor meinen aufrichtigen Dank an Dich.

      Ich habe sofort Dein Codesnippet in meine Test.htm eingebunden aber auch damit wird die mp3 abgespielt und es startet kein automatischer Download.

      es muss doch an mir liegen. Irgendwas mache ich doch falsch.

      Hallo sandsonne,

      ich versuche mich nun seit Stunden daran, den Download einer .mp3 zu erzwingen. Ich habe nun schon soviele Internetseiten und auch Anleitungen gelesen und befolgt doch leider erfolglos. D.h. bei mir wird die Datein nicht heruntergeladen sondern im Browser abgespielt. Genau das, was ich nicht wollte.

      Dafür gibt es das Attribut download.

      <a rel="nofollow" href="Anzeige.mp3" download>herunterladen</a>
      

      Bis demnächst
      Matthias

      Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.

      1. Nur mal so, wie ist den dein Browser konfiguriert?

        mp3 Dateien, abspielen, jedesmal nachfragen oder speichern?

      2. Hallo sandsonne,

        zuvor meinen aufrichtigen Dank an Dich.

        gern, bitte vermeide Vollzitate, sie stören nur den Lesefluss.

        Ich habe sofort Dein Codesnippet in meine Test.htm eingebunden aber auch damit wird die mp3 abgespielt und es startet kein automatischer Download.

        es muss doch an mir liegen. Irgendwas mache ich doch falsch.

        Der Benutzer ist immer der Oberchef über seinen Browser, niemals ein Webentwickler. Siehe auch dieses Beispiel

        Der Benutzer kann für jedes Dateiformat eine Standardaktion festlegen.

        Möglicherweise besteht auch ein Unterschied zwischen datei.mp4 und download.php?file=datei.mp4 als Verweisziel.

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        1. Hallo, Matthias,

          es tut mir leid, ich wollte gar kein Zitat schreiben. Jezt ist es hoffentlich richtig. Also:

          Ich habe Deine beispieldatei (https://wiki.selfhtml.org/extensions/Selfhtml/example.php/Beispiel:HTML_a-Element8.html) aufgerufen.

          Wenn ich dort das Bild oder den unten stehenden download Link anklicke funktiert es so, wie ich es mit meiner Datei auch haben möchte. Ohne das mein Browser nachfragt. Und das in Firefox.

          Nun habe ich meine Test.htm probeweise mal in IE geöffnet und dort werde ich gefragt öffnen oder speichern.

          Zum besseren Überblick

          • Firefox > Test.htm wird abgespielt

          • IE > Test.htm wird abgefragt öffnen oder speichern

          • Firefox > Beispieldatei Download startet sofort ohne Nachfrage (Bild + Link)

          • IE > Beispieldatei Bild wird direkt angezeigt ohne Nachfrage, Link wird abgefragt öffnen oder speichern

          1. Hallo sandsonne,

            beispieldatei https://wiki.selfhtml.org/extensions/Selfhtml/example.php/Beispiel:HTML_a-Element8.html

            Zum besseren Überblick

            • Firefox > Test.htm wird abgespielt
            • IE > Test.htm wird abgefragt öffnen oder speichern
            • Firefox > Beispieldatei Download startet sofort ohne Nachfrage (Bild + Link)
            • IE > Beispieldatei Bild wird direkt angezeigt ohne Nachfrage, Link wird abgefragt öffnen oder speichern

            Ja, du kannst es also nicht gezielt beeinflussen. Der Benutzer ist der Oberchef, nicht ein Webseitenentwickler. Wenn der Benutzer für seinen Browser wissentlich oder unwissentlich festgelegt hat, dass eine Datei im Format .sowieso immer gespeichert werden soll, dann kannst du nichts dagegen tun.

            Bis demnächst
            Matthias

            --
            Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
            1. ok, Matthias. Das heißt, es ist alles richtig und der Rest liegt an dem jeweiligen Nutzer bzw. dessen Browsereinstellungen. Das freut mich.

              Also, ich möchte mich ganz herzlich bedanken das ich heute von Dir geholfen bekam.

              Ich schließe nun hier und auch meinen Pc. Nochmals meinen Dank & Dir einen angenehmen Abend noch, Matthias.

              Gruß - sandsonne

  2. Liebe sandsonne,

    ich habe es via Htaccess sowie via php versucht.

    mit PHP kann man einen Header senden, der dem Browser vorgaukelt, dass es sich um eine (unbekannte Art von) Binärdatei handelt, was selbigen dann dazu veranlasst, den Download-Dialog zu verwenden:

    $path = './download/mp3/song.mp3';
    $filename = preg_replace('~^.*/~', '', $path);
    
    // this header forces a download dialog in the browser
    header('Content-Type: application/octet-stream');
    
    header(sprintf(
      'Content-Disposition: attachment; filename="%s"',
      $filename
    ));
    
    header('Content-Transfer-Encoding: binary');
    header('Content-Description: File Transfer');
    header('Content-Length: '.fsize($path));
    header('Accept-Ranges: bytes');
    
    readfile($path);
    
    exit;
    

    Liebe Grüße,

    Felix Riesterer.

    1. Hallo Felix Riesterer,

      mit PHP kann man einen Header senden, der dem Browser vorgaukelt, dass es sich um eine (unbekannte Art von) Binärdatei handelt, was selbigen dann dazu veranlasst, den Download-Dialog zu verwenden:

      Ich habe das Beispiel so ins Wiki übernommen. Aber ist es nicht eher der header Content-Disposition, der der Gaukler ist?

      Deshalb habe ich den Kommentar zu // this headers force a download dialog in the browser geändert. Sollte das nicht stimmen, kannst du es bitte korrigieren?

      Bis demnächst
      Matthias

      --
      Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
      1. Lieber Matthias,

        Ich habe das Beispiel so ins Wiki übernommen.

        huch? OK...

        Aber ist es nicht eher der header Content-Disposition, der der Gaukler ist?

        Meines Wissens nein, denn der Content-Disposition-Header regelt nur das Übertragen eines Dateinamens zusätzlich zu den Binärdaten. Soweit ich weiß ist es ausschließlich der unbekannte MIME-Typ im Content-Type-Header, der den Download-Dialog erzwingt. Aber ich mag mich täuschen.

        Deshalb habe ich den Kommentar zu // this headers force a download dialog in the browser geändert.

        Die Grammatik ist kaputt. Entweder "this header forces" oder "these headers force". Auch an Silvester kann ich da nicht aus meiner Haut.

        Sollte das nicht stimmen, kannst du es bitte korrigieren?

        Ich habe wieder auf korrekten Singular umgestellt.

        Liebe Grüße,

        Felix Riesterer.

        1. Hallo Felix Riesterer,

          Der OP hatte aber auch header('Content-Type: application/octet-stream'); im Script und es funktionierte nicht.

          (@_@)

          Bis demnächst
          Matthias

          --
          Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
          1. Lieber Matthias,

            Der OP hatte aber auch header('Content-Type: application/octet-stream'); im Script und es funktionierte nicht.

            naja, "der OP" hatte noch ganz andere Sachen im Script, wie z.B. $verzeichnis = "http://meineURL/Anzeige.mp3";, was für mich nach "Laden von fremder Website" aussieht.

            Dann steht da auch $dateiname = sprintf("%s/%s", $verzeichnis, $datei);, was nach meiner Überlegung http://meineURL/Anzeige.mp3/Anzeige.mp3 ergeben müsste, was ganz sicher nicht die korrekte URL sein kann.

            Mir scheint, dass da einiges schief läuft (Fehlerlogs??) und dass der Browser (welcher denn?) einfach das Beste aus den angebotenen Fehlern herauspickt.

            (@_@)

            Oh ja! Mein Code-Beispiel ist übrigens eine Verkürzung aus dem passenden Abschnitt in meinem CMS, wo das seit Jahren brav seinen Dienst tut.

            Liebe Grüße,

            Felix Riesterer.