Chrome Dev est désormais compatible avec les objets Blob sur IndexedDB.
Il s'agit d'une fonctionnalité attendue depuis longtemps pour Chrome, qui permet à l'API IndexedDB de stocker et de récupérer un Blob sans le convertir en chaîne Base64.
IndexedDB fournit un stockage persistant de type clé-valeur à grande échelle, disponible sur la plupart des navigateurs modernes (Safari sera apparemment compatible avec iOS 8 et Mac OS X 10.10). Vérifiez son état d'implémentation.
Un objet blob est un objet binaire semblable à un 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. Vérifiez son état d'implémentation.
Stocker un blob dans IndexedDB
Il n'existe aucun moyen de détecter la disponibilité des blobs dans IndexedDB. Vous devez essentiellement utiliser try-catch, puis utiliser une chaîne au lieu d'un Blob si celui-ci 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 sur Firefox et Internet Explorer. L'assistance Safari doit être examinée.
Bonne lecture !