La prise en charge de Blob pour IndexedDB est disponible dans Chrome pour les développeurs.

Eiji Kitamura
Eiji Kitamura

Chrome Dev prend désormais en charge Blob dans IndexedDB.

Cette fonctionnalité très attendue dans Chrome permet à l'API IndexedDB de stocker et de récupérer un objet Blob sans le convertir en chaîne Base64.

IndexedDB fournit un espace de stockage persistant de type clé-valeur à grande échelle, disponible sur la plupart des navigateurs récents (Safari devrait être compatible avec iOS8 et Mac OS X 10.10). Consultez l'état de son implémentation.

Blob est un objet binaire de type fichier que les moteurs JavaScript modernes peuvent gérer. Les objets File héritent de Blob. Vous pouvez également récupérer des images et des fichiers en tant que Blob via XMLHttpRequest. Consultez l'état de son implémentation.

Stocker un objet blob dans IndexedDB

Il n'existe aucun moyen de détecter la disponibilité des objets blob dans IndexedDB. En fait, vous devez essayer de résoudre le problème, puis utiliser la chaîne au lieu de l'objet Blob si elle n'est pas disponible. Voici un exemple de code:

// 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 prise en charge des objets Blob pour IndexedDB est déjà disponible dans Firefox et Internet Explorer. La prise en charge de Safari doit être examinée.

Profitez-en bien !