La compatibilidad de BLOB con IndexedDB llegó a Chrome Dev

Eiji Kitamura
Eiji Kitamura

Chrome Dev ahora es compatible con Blob en IndexedDB.

Esta es una función muy esperada para Chrome que permite que la API de IndexedDB pueda almacenar y recuperar un BLOB sin convertirlo en una cadena Base64.

IndexedDB proporciona almacenamiento persistente de tipo clave-valor a gran escala que está disponible en la mayoría de los navegadores modernos (Safari, al parecer, será compatible con iOS8 y Mac OS X 10.10). Consulta el estado de su implementación.

BLOB es un objeto binario similar a un archivo que los motores de JavaScript modernos pueden controlar. Los objetos de archivo se heredan de Blob. También puedes recuperar imágenes y archivos como Blob a través de XMLHttpRequest. Consulta el estado de su implementación.

Cómo almacenar un BLOB en IndexedDB

No hay forma de detectar la disponibilidad de BLOB en IndexedDB. Básicamente, debes try-catch y, luego, usar una string en lugar de Blob si no está disponible. Este es un código de muestra:

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

La compatibilidad de BLOB con IndexedDB ya está disponible en Internet Explorer y Firefox. Se debe investigar la compatibilidad con Safari.

¡Que lo disfrutes!