Große JavaScript-HTML5-der blob (von großen ArrayBuffers) zu entwickeln ist eine Riesen Datei in der client-Seite
Ich Schreibe eine web-browser-app (client-Seite), dass downloads eine riesige Menge von Blöcken aus vielen Quellen und verknüpft Sie zu bauen, ein blob. Dann das blob gespeichert wird auf dem lokalen Dateisystem als eine Allgemeine Datei. Die Art, wie ich bin, dies zu tun ist es, durch Objekte ArrayBuffer und ein blob.
var blob = new Blob([ArrayBuffer1, ArrayBuffer2, ArrayBuffer3, ...], {type: mimetype})
Diese funktioniert ok für kleine und mittlere Dateien (bis 700 MB ca), aber der browser stürzt ab bei größeren Dateien. Ich verstehe, dass der RAM-Speicher hat seine Grenzen. Der Fall, dass ich brauche, um den blob bauen, um eine Datei generieren, aber ich will erlauben Sie Benutzern das herunterladen von Dateien sehr viel größer als die Größe (stellen Sie sich zum Beispiel Dateien über 8GB).
¿Wie kann ich den blob bauen die Vermeidung von Größenbeschränkungen? LocalStorage ist eingeschränkter als RAM, so dass ich nicht wissen, was oder wie es zu tun.
- Erstellen Sie die Datei, und versuchen Sie Anhängen, alle eingehenden arrays in der Datei nicht nur eine Zeit, es zu schreiben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, sind nur die Verkettung von Daten-arrays zusammen? Warum gehen Sie nicht etwa, indem der array-Puffer zusammen in einem Riesen-blob. Sie hätte zu Durchlaufen, und fügen Sie jede arrayBuffer ein zu einer Zeit. Sie würde
seek
zum Ende der filewriter zum Anhängen von arrays. Und zum Lesen werden nur Teile des riesigen blob zurück, erhalten Sie eineslice
von der blob, um zu vermeiden, den browser zum Absturz zu bringen.Anhängen-Funktion
Wieder zu Lesen zu vermeiden, die gesamte blob zurück, lese nur Teile/Stücke von Ihrem Riesen-blob, die beim generieren der Datei, die Sie erwähnen.
Partial Read-Funktion
Müssen Sie möglicherweise halten Sie die Indizes, die vielleicht in einem header-Abschnitt Ihrer riesigen BLOB - ich müsste mehr wissen, bevor ich geben konnte, mehr feedback.
Update - Vermeidung von quota-limits, Vorübergehende oder Anhaltende
in der Antwort auf Ihre Kommentare unten
Es scheint, dass Sie in Probleme laufen mit Speicherkontingent wird, weil Sie die temporäre Speicherung. Das folgende ist ein Ausschnitt ausgeliehen von google gefunden hier
Um dieses limit zu umgehen, die Sie haben, um Schalter zu hartnäckig ist, wird er Ihnen zu der Quote verfügbaren freien Speicherplatz auf der Festplatte. Um dies zu tun, verwenden Sie die folgende initialisiert das File-system anstelle der temporären Speicherung verlangen.
window.requestFileSystem()
, aber wenn ich Anrufnavigator.webkitTemporaryStorage.queryUsageAndQuota()
ich kann sehen, dass nur 2 GB (oder weniger, in anderen Computern) sind für mich verfügbar.