Chris: Bei Öffnen eines Links auf TXT-Datei Save-Dialog öffnen

Hallo,
habe da folgendes Problem.
Ich habe also ein txt-File auf dem Server liegen und in einer Seite verweist ein Link auf diese Datei. Jetzt soll aber der Browser beim Klicken auf diesen Link nicht den Inhalt der Text-Datei ausgeben, sondern es soll der "Speichern unter"-Dialog geöffnet werden, wodurch die Möglichkeit besteht, das Txt-File auf der lokalen Platte zu speichern.

Hoffe mir kann geholfen werden!!!

  1. 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
    1. Hallo,

      Dabei ist natürlich zu beachten, daß der Internet Explorer von HTTP wenig hält und sich einen Dreck um die Mime-Types kümmert...

      Richtige Browser beachten das aber schon.

      Andreas

    2. Hi Johannes,

      Bei der Kommunikation müssen sie sich darauf
      einigen, ob der Empfänger den Mime-Type akzeptiert,
      den der Sender senden will.

      Yep.

      am komfortabelsten sollte es sich jedoch mit Perl
      lösen lassen.

      Um Gottes Willen, wozu denn ein da Programm starten?

      Es reicht doch, in der Webserver-Konfiguration die ent-
      sprechende Abbildung zwischen Dateinamensmuster und
      MIME-Typ einzutragen (notfalls lokal via .htaccess).

      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 ... zu senden

      Dieses Ziel ist nicht erreichbar.

      Es gibt keinen MIME-Typ, für dessen Behandlung ich in
      meinem Browser nicht irgend ein mir sinnvoll erschei-
      nendes zu startendes Programm konfigurieren kann.

      Der Server hat für das Verhalten des Browsers lediglich
      ein _Vorschlagsrecht_ - _befehlen_ kann er ihm nichts.

      Woher will der Server denn wissen, daß der Browser
      überhaupt "Dateien speichern" kann? Das ist _keine_
      zwingende Voraussetzung für einen HTTP-Client ...

      Viele Grüße
            Michael