Johannes Röckert: Bei Öffnen eines Links auf TXT-Datei Save-Dialog öffnen

Beitrag lesen

Hallo Chris,

Ich zitiere aus selfhtml (http://selfhtml.teamone.de/diverses/mimetypen.htm):

"SSowohl jeder Web-Browser als auch jeder Web-Server führen eine Liste mit ihnen bekannten Mime-Typen. Bei der Kommunikation müssen sie sich darauf einigen, ob der Empfänger den Mime-Type akzeptiert, den der Sender senden will. Moderne Browser akzeptieren zwar in der Regel jeden Mime-Type und bieten dem Anwender einfach an, falls sie den Mime-Typ nicht kennen, die zu empfangenden Daten als Download-Datei abzuspeichern."

In der darunter zu findenden Auflistung der wichtigsten MIME-Typen findet sich folgendes:
Mime-Type: text/plain
Dateiendung: *.txt
Bedeutung: reine Textdateien

Sicher gibt es viele Lösungen für das Problem (die einfachste ist wohl eine "Wählen Sie Bitte Ziel->Speichern Unter in ihrem Browser!"-Meldung), am komfortabelsten sollte es sich jedoch mit Perl lösen lassen. Das Ziel ist es, einen ungültigen MIME-Typ (oder zumindest einen, den der Browser als "damit kann ich nichts anfangen, der Benutzer muss sich selber um die Datei kümmern" weiterleitet, z.B. ausführbare Dateien; es wäre ja schlimm, wenn der Browser ausführbare Dateien, auf welche Links verweisen, ungefragt ausführen würde ;)  ) zu senden - gefolgt von der Datei. Dabei muss man sich jedoch vor den Webserver schummeln, da dieser sonst den MIME-Typ automatisch mitsendet (die dritte Lösung wäre wohl das Ändern der MIME-Typen in der Serverconfig).

Kurz umrissen:
#!usr/bin/perl

// Datei aus dem Query-String in $file einlesen
...

// Der gewünschte MIME-Typ befindet sich in $MIME_Type.

print "Content-Type: $MIME_Type\n";
print "Content-Length: ".(-s $file)."\n";
print "\n";

// Den Dateiinhalt ausgeben. Bei Textdateien reicht zeilenweises Einlesen, ansonsten bei Binärdateien unbedingt die zeichenweise Lösung verwenden!

open F, $file || die;
print while <F>;
close F;

Gruß,

  • Johannes