Il supporto BLOB per IndexedDB è stato disponibile su Chrome Dev

Eiji Kitamura
Eiji Kitamura

Chrome Dev ha ottenuto il supporto per Blob su IndexedDB.

Si tratta di una funzionalità attesa da tempo per Chrome che consente all'API IndexedDB di archiviare e recuperare un Blob senza convertirlo in una stringa Base64.

IndexedDB fornisce un'archiviazione permanente su larga scala con tipo valore-chiave disponibile sulla maggior parte dei browser moderni (a quanto pare Safari supporterà iOS8 e Mac OS X 10.10). Controlla lo stato di implementazione.

Blob è un oggetto binario simile a un file che i motori JavaScript moderni 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 tramite funzionalità la disponibilità di Blob in IndexedDB. Essenzialmente devi provare a catch e utilizzare la stringa anziché Blob se non è disponibile. Ecco alcuni esempi di codice:

// 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 di Blob per IndexedDB è già disponibile anche su Firefox e Internet Explorer. È necessario verificare il supporto di Safari.

Buon divertimento!