Blob-ondersteuning voor IndexedDB is geland op Chrome Dev

Chrome Dev biedt ondersteuning voor Blob op IndexedDB.

Dit is een langverwachte functie voor Chrome waarmee de IndexedDB API een Blob kan opslaan en ophalen zonder deze te converteren naar een Base64-tekenreeks.

IndexedDB biedt grootschalige persistente opslag van het type sleutelwaarde die beschikbaar is in de meeste moderne browsers (Safari krijgt blijkbaar ondersteuning in iOS8 en Mac OS X 10.10). Bekijk de implementatiestatus .

Blob is een bestandachtig binair object dat moderne JavaScript-engines kunnen verwerken. Bestandsobjecten erven van Blob. Je kunt ook afbeeldingen en bestanden als Blob ophalen via XMLHttpRequest. Bekijk de implementatiestatus .

Een blob opslaan op IndexedDB

Er is geen manier om de beschikbaarheid van een blob in IndexedDB te detecteren. Je moet in principe try-catch gebruiken en vervolgens string in plaats van blob gebruiken als deze niet beschikbaar is. Hier is wat voorbeeldcode:

// 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);
}

Blob-ondersteuning voor IndexedDB is al beschikbaar in Firefox en Internet Explorer. Ondersteuning voor Safari moet nog worden onderzocht.

Genieten!