Verwenden Sie FileAPI, um eine große generierte Datendatei herunterzuladen

8

Der JavaScript-Prozess generiert eine Menge Daten (200-300 MB). Ich möchte diese Daten für weitere Analysen speichern, aber das Beste, was ich bisher gefunden habe, ist die Verwendung dieses Beispiels Ссылка , für das es keine Option gibt ich, weil es so aussieht, als ob alle Daten verfügbar sein müssen bevor mit dem Herunterladen beginnt. Aber was ich brauche ist etwas wie

%Vor%

Natürlich wird statt der Math.random () eine sinnvolle Konstruktion sein.

    
Alex Netkachov 13.05.2013, 13:11
quelle

2 Antworten

1

@dader - Ich würde auf das Beispiel von dader aufbauen.

  1. Verwenden Sie HTML5 FileSystem API - aber anstatt in die Datei jede Zeile zu schreiben (mehr IO als es Wert ist), können Sie einige der Zeilen im Speicher in einem JavaScript-Objekt / Array / String chargen und nur schreiben zu der Datei, wenn sie eine bestimmte Schwelle erreichen. Sie hängen also an eine lokale Datei an, während der Prozess tuckert (erleichtert das Pausieren / Neustarten / Stoppen usw.)
  2. Bemerkenswert ist das folgende, das ein Beispiel dafür ist, wie Sie das Dialoge erzeugen können, um die Menge an Daten anzufordern, die Sie benötigen würden (es klingt groß). Getestet in Chrom .:

    %Vor%
  3. Wenn Sie fertig sind, können Sie Javascript verwenden, um ein neues Fenster mit der URL des gespeicherten Blob-Objekts zu öffnen, das Sie über: fileEntry.toURL ()

  4. abrufen können
  5. ODER - wenn es fertig ist, kann man diese URL einfach in einem HTML-Link anzeigen und dann können sie mit der rechten Maustaste darauf klicken und den gewünschten Link speichern, wie sie wollen.

Aber das ist etwas Neues und Cooles, das Sie komplett im Browser ausführen können, ohne dass Sie überhaupt einen Server einbeziehen müssen. Seitliche Anmerkung, 200-300MB der Daten, die durch einen Javascript-Prozess erzeugt werden, klingt absolut riesig ... das wäre ein Anliegen, ob Sie die "richtigen" Daten speichern ...

    
Nick Sharp 10.06.2013 20:37
quelle
1

Was Sie eigentlich versuchen, ist eine Art Streaming. Ich meine FileAPI ist nicht für die Aufgabe geeignet. Stattdessen könnte ich zwei Optionen vorschlagen:

Der erste, der die XHR-Funktion verwendet, dh ajax, indem er Ihre Daten in mehrere Chunks aufteilt, die nacheinander an den Server gesendet werden, jeder Chunk in seiner eigenen Anfrage zusammen mit einer ID (zur Identifizierung des Streams) und einem Positionsindex ( zum Identifizieren der Chunk-Position). Ich empfehle das nicht, da es Arbeit hinzufügt, um Daten zu zerlegen und wieder zusammenzufügen, und da es eine bessere Lösung gibt.

Die zweite Möglichkeit, dies zu erreichen, ist die Websocket-API. Es ermöglicht Ihnen, Daten sequenziell zum Server zu senden, wenn sie generiert werden. Nach einer üblichen Stream-API. Ich denke du brauchst das definitiv.

Diese Seite ist möglicherweise ein guter Ausgangspunkt: Ссылка

Das ist alles Leute!

BEARBEITEN Sie Ihren Kommentar:

Ich bin mir nicht sicher, ob Sie Ihren Standpunkt verstehen, aber was ist mit der FileSystem-API von HTML5?

Es gibt ein paar Beispiele hier: Ссылка unter denen dieses Beispiel, mit dem Sie Daten anhängen können in eine existierende Datei. Sie können auch eine neue Datei usw. erstellen:

%Vor%

EDIT 2:

Was Sie versuchen, ist nicht möglich, indem Sie Javascript wie auf SO angegeben verwenden. hier . Trotzdem schlägt der Autor vor, Java Applet zu verwenden, um das erforderliche Verhalten zu erreichen.

Um es auf den Punkt zu bringen, die HTML5-Dateisystem-API stellt nur ein Sandkasten-Dateisystem zur Verfügung, das sich in einem versteckten Verzeichnis des Browsers befindet. Wenn Sie also auf das echte Dateisystem zugreifen möchten, wäre die Verwendung von Java für Ihren Anwendungsfall ausreichend. Ich denke, es gibt eine Schnittstelle zwischen Java und JavaScript hier . Wenn Sie jedoch Ihre Daten nur über den Browser verfügbar machen möchten (abhängig von der gleichen Ursprungsrichtlinie), verwenden Sie die FileSystem-API.

    
dader 13.05.2013 13:51
quelle

Tags und Links