Download mit PERL
RH
- perl
Hallo zusammen,
habe per Recherche im Internet für das Downloaden von Dateien folgende PERL-Statements zusammengestellt. Doch leider wird statt dem Anzeigen eines Speichern-als-Dialogfensters (z.B. für das Herunterladen einer PDF-Datei) nur eine große Anzahl unleserlicher Zeichen im Browserfenster dargestellt.
--------------------------------------------
...
$filewithpath = $docdirectory."/".$datei;
$suffix = substr($datei,length($datei)-3);
$filesize = -s $filewithpath;
print "Content-type: ".$doctypes{$suffix}."\n";
print "Content-length: ".$filesize."\n";
print "Content-Disposition: attachment; filename=".$datei."\n";
open(READ,$filewithpath);
binmode READ;
binmode STDOUT;
while (<READ>) { print; }
close(READ);
exit;
...
--------------------------------------------
Hat jemand eine Idee woran das liegen kann? Die Vielzahl von Beispielen im Internet verwenden immer das eigentlich entscheidende Konstrukt "Content-Disposition: attachment ...", was genau das Anzeigen des Speichern-als-Dialogfensters bewirken soll. Mit PHP klappt das auch ohne weiteres. Deshalb vermute ich, dass der "Wurm" von mir selbst hinein gebracht wurde. Doch leider sehe ich es nicht.
Danke für eure Hilfe, Ralf
Hat jemand eine Idee woran das liegen kann? Die Vielzahl von Beispielen im Internet verwenden immer das eigentlich entscheidende Konstrukt "Content-Disposition: attachment ...", was genau das Anzeigen des Speichern-als-Dialogfensters bewirken soll. Mit PHP klappt das auch ohne weiteres. Deshalb vermute ich, dass der "Wurm" von mir selbst hinein gebracht wurde. Doch leider sehe ich es nicht.
Spontan gesagt fehlt mir ein "\n" nach den Headern.
mfg Beat
Hat jemand eine Idee woran das liegen kann? Die Vielzahl von Beispielen im Internet verwenden immer das eigentlich entscheidende Konstrukt "Content-Disposition: attachment ...", was genau das Anzeigen des Speichern-als-Dialogfensters bewirken soll. Mit PHP klappt das auch ohne weiteres. Deshalb vermute ich, dass der "Wurm" von mir selbst hinein gebracht wurde. Doch leider sehe ich es nicht.
Spontan gesagt fehlt mir ein "\n" nach den Headern.
mfg Beat
Hallo Beat,
danke für Deinen Hinweis.
Mir ist nun klar warum es nicht funktionieren konnte:
die Ursache lag gar nicht in dem geposteten Teil sondern viel weiter vorne im Script: dort wurde bereits ein Header für HTML erzeugt. Die Reaktion ist dann logisch: alles was dannach kommt wird als Bestandteil einer HTML-Datei interpretiert und somit nur im Browser angezeigt. Für einen Download muss diese Stelle im Script übersprungen werden. Und so geht's nun auch.
Zur Problematik mit den '\n': die Frage, ob einer zuviel oder zuwenig, habe ich mit der CGI-Funktion header gut umgehen können:
-------------------------------------------------------
print ($c->header(-type => $doctypes{$suffix},
-content_length => $filesize,
-content_transfer_encoding => 'binary',
-content_disposition => 'attachment; filename='.$datei));
-------------------------------------------------------