Il supporto BLOB per IndexedDB è stato disponibile su Chrome Dev

Chrome Dev ha implementato il supporto per Blob su IndexedDB.

Si tratta di una funzionalità molto attesa per Chrome che consente all'API IndexedDB di memorizzare e recuperare un blob senza convertirlo in una stringa Base64.

IndexedDB fornisce archiviazione persistente di tipo chiave-valore su larga scala ed è disponibile sulla maggior parte dei browser moderni (a quanto pare Safari supporterà questa funzionalità in iOS 8 e macOS X 10.10). Controlla lo stato di implementazione.

Blob è un oggetto binario simile a un file che i moderni motori JavaScript possono gestire. Gli oggetti File ereditano da Blob. Puoi anche recuperare immagini e file come blob tramite XMLHttpRequest. Controlla lo stato di implementazione.

Archiviazione di un blob su IndexedDB

Non è possibile rilevare la disponibilità dei blob in IndexedDB. In pratica, devi utilizzare try-catch e poi usare stringa anziché Blob se non è disponibile. Ecco un codice di esempio:

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

Il supporto dei blob per IndexedDB è già disponibile anche su Firefox e Internet Explorer. È necessario esaminare il supporto di Safari.

Buon divertimento!