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!