Blob-Unterstützung für IndexedDB in Chrome Dev

In der Chrome Dev-Version wird jetzt die Unterstützung für Blobs in IndexedDB angeboten.

Dies ist eine lang erwartete Funktion für Chrome, mit der die IndexedDB API einen Blob speichern und abrufen kann, ohne ihn in einen Base64-String umzuwandeln.

IndexedDB bietet einen nichtflüchtigen Speicher vom Typ „Schlüssel/Wert“ im großen Maßstab, der in den meisten modernen Browsern verfügbar ist. Safari wird IndexedDB offenbar in iOS 8 und Mac OS X 10.10 unterstützen. Sehen Sie sich den Implementierungsstatus an.

Ein Blob ist ein dateiähnliches Binärobjekt, das von modernen JavaScript-Engines verarbeitet werden kann. Dateiobjekte werden von Blobs abgeleitet. Sie können Bilder und Dateien auch über XMLHttpRequest als Blob abrufen. Sehen Sie sich den Implementierungsstatus an.

Blob in IndexedDB speichern

Es gibt keine Möglichkeit, die Blob-Verfügbarkeit in IndexedDB zu erkennen. Sie müssen im Grunde try-catch verwenden und dann String anstelle von Blob verwenden, wenn es nicht verfügbar ist. Hier ein Beispielcode:

// Create an example Blob object
var blob = new Blob(['blob object'], {type: 'text/plain'});

try {
    var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

    // Store the object  
    var req = store.put(blob, 'blob');
    req.onerror = function(e) {
        console.log(e);
    };
    req.onsuccess = function(event) {
        console.log('Successfully stored a blob as Blob.');
    };
} catch (e) {
    var reader = new FileReader();
    reader.onload = function(event) {
        // After exception, you have to start over from getting transaction.
        var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

        // Obtain DataURL string
        var data = event.target.result;
        var req = store.put(data, 'blob');
        req.onerror = function(e) {
            console.log(e);
        };
        req.onsuccess = function(event) {
            console.log('Successfully stored a blob as String.');
        };
    };
    // Convert Blob into DataURL string
    reader.readAsDataURL(blob);
}

Die Blob-Unterstützung für IndexedDB ist bereits in Firefox und Internet Explorer verfügbar. Der Safari-Support muss untersucht werden.

Viel Spaß!