[JavaScript:] Seite sichern

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von maceis, 21.01.2006.

  1. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    hallo zusammen,

    ich arbeite eigentlich so gut wie nie mit Javascript und habe dementsprechend wenig Ahnung.

    Ich möchte folgendes Ziel erreichen.
    Auf einer Webseite soll es einen Link geben, der auf eine Textdatei zeigt.
    Wenn der link angeklickt wird. soll sich die Textdatei im Browser öffnen - soweit kein Problem.
    Nun soll sich aber ein Sichern/Speichern Dialog öffnen, der es dem benutzer erlaubt, die Seite komfortabel abzuspeichern.
    Irgendwie muss das wohl mir dem Kommando "document.execCommand('SaveAs')" gehen, aber ich weiss nicht genau wie.

    Noch schöner wäre es, wenn eine HTML Seite aufgerufen wird, die den Text enthält und einen [Sichern] Button. Wenn man den anklickt, soll aber nicht die HTML Seite gespeichert werden, sondern nur die Text Seite.
    Man müsste also bei dem Sichern Kommando eine andere Datei auf dem Server zum Speichern angeben können.
    Geht das?
     
  2. dms

    dms Gast

    Da kommst Du mit JavaScript nicht weit. document.execCommand ist JScript, funktioniert also nur im IE. Eine allgemeine Lösung auf JavaScript-Basis gibt es nicht.

    Vielleicht kannst Du hiermit was anfangen: Biete Die Datei direkt zum Download an. Einen Download kannst Du per Header erzwingen. Du könntest mit dem Sichern-Button die Text-Datei mit Download-Header in einem versteckten IFrame laden.
     
  3. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Die Idee mit dem Download erzwingen hatte ich auch schon, wusste aber nicht, wie das geht.
    Wenn ich Dich richtig verstanden habe, kann ich einen Link auf einen Textdatei setzen, die dann heruntergeladen wird. Ich verstehe nur noch nicht ganz, wie ich verhindere, das die txt Datei im Browser angezeigt wird.
    Die heruntergeladene Date soll ja keine HTML o.ä. mehr enthalten.

    Im schlimmsten Fall mach ich das mit einen CGI Skript, aber ich dachte, das geht vielleicht auch anders/einfacher.
     
  4. dms

    dms Gast

    Eine einfachere Möglichkeit kenne ich leider auch nicht. Du musst nur ein paar Headerwerte setzen. Geht mit CGI, weis aber nicht wie. :) Mit PHP könnte es so aussehen (Beispiel aus dem PHP-Manual):
    Code:
    $filecontent="Some text/code im creating in the script";
    $downloadfile="somefile.txt";
    
    header("Content-disposition: attachment; filename=$downloadfile");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".strlen($filecontent));
    header("Pragma: no-cache");
    header("Expires: 0");
     
  5. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Danke für den Hinweis.
    Zwischenzeitlich habe ich mir schon selbst ein CGI Skript gebastelt.
    Header setzen ist eigentlich ganz simpel, man gibt sie einfach mit print aus (natürlich an der richtigen Stelle).

    So sieht meine Lösung aus. Vielleicht kann es ja mal jemand brauchen.
    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    # use CGI::Carp qw(fatalsToBrowser);
    
    my $filename    = "Dateiname.txt";
    my $docroot     = $ENV{DOCUMENT_ROOT};
    my $filesize    = (stat("$docroot/$filename"))[7];
    
    open(FH,'<',"$docroot/$filename") or die "Fehler: $filename \n$!!";
    my @file = <FH>; 
    
    print "Content-Type: application/octet-stream\n";
    print "Transfer-Encoding: binary\n";
    print "Content-Disposition: attachment; filename=$filename\n";
    print "Content-Lenght: $filesize\n\n";
    print @file;
    Das einzge was mich wundert, ist, dass die Dateigröße nicht richtig übermittelt wird. Safari zeigt da z.B. ein Fragezeichen an.

    Den Dateinamen könnte man noch aus dem Request-URI extrahieren, aber das ist ein anderes Thema.

    BTW:
    header("Content-Transfer-Encoding: binary");
    ist übrigens nicht Teil des HTTP Standards; Content-Transfer-Encoding wird von MIME verwendet und nicht von HTTP.
    HTTP verwendet Content-Encoding und Transfer-Encoding mit jeweils unterschiedlichen Bedeutungen.
    Content-Disposition ist eigentlich auch nicht Teil des HTTP Standards, wird aber von vielen Clients ausgewertet.
     
Die Seite wird geladen...
Ähnliche Themen - [JavaScript Seite sichern
  1. leo-magic
    Antworten:
    0
    Aufrufe:
    198
    leo-magic
    27.05.2016
  2. oglimmer
    Antworten:
    4
    Aufrufe:
    909
    oglimmer
    08.12.2013
  3. Macmini2
    Antworten:
    2
    Aufrufe:
    513
    Macmini2
    04.04.2013
  4. emmmmmi
    Antworten:
    4
    Aufrufe:
    611
    emmmmmi
    22.02.2013
  5. soxnox
    Antworten:
    9
    Aufrufe:
    665
    soxnox
    14.06.2006