ubuntuusers.de

JavaScript: String als lokale Datei speichern?

Status: Gelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

dr.gonzo

Avatar von dr.gonzo

Anmeldungsdatum:
17. Oktober 2004

Beiträge: 252

Hi,

könnt ihr mir helfen? Ich arbeite an einem kleinen WebClienten in JavaScript, welcher eine csv-Datei erstellt. Diese ist in einem String gespeichert und bisher verfahre ich damit so:

1
2
3
var win = window.open();
win.document.open();
win.document.write(str);

Ich öffne ein neues Fenster, in welchem die csv-Datei dargestellt wird. So kann der Benutzer, wenn er denn möchte, diese Datei lokal abspeichern. Gibt es aber auch die Möglichkeit, dem Benutzer gleich einen SaveAs-Dialog anzuzeigen? Ich bin in JavaScript leider nicht bewandert genug, um zu wissen, ob das sicherheitstechnisch erlaubt ist.

An JavaScriptframeworks benutze ich Dojo 1.7.

Grüße, Jörg

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

JavaScript unterstützt ootb gewollt kein I/O auf irgendein lokales Laufwerk. Da ist per Design so gewollt.

node.js besitzt Funktionen für I/O - keine Ahnung, ob das Client-seitig auch funktioniert.

Die IMHO bessere Lösung ist aber so wie so anders, nämlich server-seitig. Du sagst, dass du Daten als String bekommst und dann CSV-Style im Browser-Fenster darstellen lässt. Dann bei doch noch eine Schaltfläche ein a la "Download as CSV", die den Server dazu veranlasst, die Daten mit dem richtigen Header als CSV-Datei zu schicken. Dann kommt der passende "Öffnen" und "Speichern unter..."' Dialog des Browsers hoch und du hast, was du möchtest. Gruß, noisefloor

dr.gonzo

(Themenstarter)
Avatar von dr.gonzo

Anmeldungsdatum:
17. Oktober 2004

Beiträge: 252

noisefloor schrieb:

Hallo,

Hallo noisefloor,

danke für Deine Antwort!

JavaScript unterstützt ootb gewollt kein I/O auf irgendein lokales Laufwerk. Da ist per Design so gewollt.

Das hab ich vermutet, dann muß ich wohl bei meiner Lösung bleiben.

node.js besitzt Funktionen für I/O - keine Ahnung, ob das Client-seitig auch funktioniert.

Höchstwahrscheinlich nicht, würde das Sicherheitskonzept über den Haufen schmeissen 😉

Die IMHO bessere Lösung ist aber so wie so anders, nämlich server-seitig. Du sagst, dass du Daten als String bekommst und dann CSV-Style im Browser-Fenster darstellen lässt. Dann bei doch noch eine Schaltfläche ein a la "Download as CSV", die den Server dazu veranlasst, die Daten mit dem richtigen Header als CSV-Datei zu schicken. Dann kommt der passende "Öffnen" und "Speichern unter..."' Dialog des Browsers hoch und du hast, was du möchtest.

Leider nein, ich generiere die CSV-Datei im Clienten (besser gesagt Dojo generiert sie mir), so dass die Lösung mit dem Server nicht funktioniert. Dann bleibt es bei der bisherigen Lösung, damit kann ich zur Not auch leben. Wäre ein nice-to-have gewesen...

Grüße, Jörg

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Höchstwahrscheinlich nicht, würde das Sicherheitskonzept über den Haufen schmeissen

Stimmt. Inzwischen weiß ich aber auch, dass node.js ausschliesslich für den server-seitigen Einsatz gemacht ist.

Gruß, noisefloor

coffeeholic Team-Icon

Avatar von coffeeholic

Anmeldungsdatum:
10. August 2012

Beiträge: 1938

Wohnort: ::1

Du könntest das ganze mit einer DataURL versuchen:

1
2
3
4
function export(){
		var uriContent = "data:text/utf-8," + encodeURIComponent(string_zum_exportieren);
		window.open(uriContent);
	}

Beim Test in meinem Firefox geht der Download-Dialog auf! 😀

Antworten |