"Speichern unter" über Java-Script?



  • Eine generierte Seite liegt auf dem Server und wird angezeigt. Nun möchte ich die Möglichkeit bereitstellen, diese Seite lokal über den Browser zu speichern.

    Ein Linksklick auf einen Link öffnet die Datei im Browser (bringt ja nix, wird ja schon angezeigt). Bei einem Rechtsklick habe ich die Möglichkeit, mit "Ziel speichern unter" die Datei auf meinen Rechner zu laden.

    Kennt jemand eine Möglichkeit, wie man durch einen Linksklick via Javascript oder wie auch immer, direkt einen Download als HTML-Dokument erreichen kann?



  • Du könntest evtl. die HTML-Seite über ein (PHP-)Script zum Browser schicken und dabei die header entsprechend modifizieren.



  • Seite zum Browser schicken, ist kein Problem. Was aber meinst Du mit modifiziertem Header?



  • http://www.php.net/header

    Also dann ungefähr so:

    <?php
    header('Content-type: text/html');
    header('Content-Disposition: attachment; filename="test.htm"');
    readfile('test.htm');
    ?>
    


  • In diesem (ziemlich grossen) Projekt muss ich mich bereits mit C++, JAVA, XSLT, VB und JS herumschlagen. Von PHP habe ich leider NULL Ahnung. Der Dreizeiler als solches ist sicherlich nicht unbedingt das Problem, jedoch die Einbindung in die Laufzeitumgebung ein ganz Anderes.

    Letztendlich muss es doch darauf ankommen, was der Browser vom Server erhält. Diese Informationen werden über JAVA-Servlets via Tomcat an den Browser geliefert.

    Nachdem ich jetzt die halbe Nacht im Internet verbracht habe, habe ich das Beispiel von flenders x-Mal gefunden. Das aus

    header('Content-Disposition: attachment; filename="test.htm"');
    

    vermutlich resultierende META-TAG eher selten und keine der angegebenen Schreibweisen zeigt irgendeine Reaktion im Browser. Wenn ich die Beschreibung bei W3C richtig verstanden habe, sollte dieses TAG dazu führen, das der Browser den Inhalt nicht anzeigt, sondern speichern soll.

    Leider ist die gewünschte Funktionalität aus diversen Gründen nicht unwichtig. Die Anwendung lässt leider auch keine andere Möglichkeit der Speicherung zu, da alle Browser-Steuerungselemente abgeschaltet sind (aus guten Gründen).

    Daher die Frage: Gibt es noch eine andere Möglichkeit als PHP? Wenn nein, was muss ich tun, damit das Skript ausgeführt wird. Der (zugegeben schwache Versuch), das Skript einfach über den Browser zu starten führt zur Anzeige des Codes. Wie schon gesagt: PHP = NULL Ahnung.



  • Schau dir mal setHeader/addHeader an 🙂
    und hier das Beispiel unter 2.6



  • Zur halben Nacht gehörte auch die Suche auf http://java.sun.com/j2se/1.5.0/docs/api/index.html. Damit ist dies eine weitere javax-Klasse, die ich unter diesem Link nicht gefunden habe. 😡

    Da SUN es für unnötig hält, eine Suchfunktion zu implementieren, frage ich mich, wie Du auf diese Klasse bzw. Seite gekommen bist?

    Die endgültige Ausgabe erfolgt im System über PrintWriter, weshalb ich mich auf die direkte Ausgabe des META-TAGS versteift habe. HttpServletResponse kriege ich eigentlich genau an der richtigen Stelle ohne großen Aufwand.

    Wie "der Kaiser" sagt: Schau'n wir mal. Danke. 👍



  • Was für PHP gilt gilt auch für Java:

    response.setContentType("text/html");
    response.addHeader("Content-Disposition", "attachment;filename=test.html");
    

    Der Code gehört ins Servlet!
    Und wenn im Browser noch immer der Inhalt angezeigt wird dann ändere einfach mal den MIME-Typ auf irgendetwas unbekanntes, also von "text/html" (weil damit kann der Browser ja was anfangen) auf z.B. "application/xyz".

    ms



  • Manfred Schmidtke schrieb:

    Da SUN es für unnötig hält, eine Suchfunktion zu implementieren, frage ich mich, wie Du auf diese Klasse bzw. Seite gekommen bist?

    Google 😉

    Manfred Schmidtke schrieb:

    Die endgültige Ausgabe erfolgt im System über PrintWriter, weshalb ich mich auf die direkte Ausgabe des META-TAGS versteift habe.

    Ich weiß nicht, was genau du unter META-TAGS verstehst, aber das was du da sendest hat nichts mit den HTML-Meta-Tags zu tun...



  • Wie mit diesem sch... Framework schon öfter passiert. Offensichtlich hat es mal funktioniert, aber irgendwann hat jemand ...

    Alles hat nix gefruchtet und das ist jetzt herausgekommen:

    IIDownload.service( _response, IIProperties.getStringProperty("TmpDirectory") + "/" +  m_currentFile.getName() );
    

    Mit anderen Worten: Alles war schon da, nur diese eine Zeile fehlte!

    Ohne Eure Hilfe hätte ich das nicht so schnell herausgefunden. Nochmals Danke.


Anmelden zum Antworten