Chrome Dev agregó compatibilidad 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 objeto Blob sin convertirlo en una cadena Base64.
IndexedDB proporciona almacenamiento persistente de tipo par clave-valor a gran escala que está disponible en la mayoría de los navegadores modernos (al parecer, Safari admitirá iOS8 y Mac OS X 10.10). Consulta el estado de implementación.
Un BLOB es un objeto binario similar a un archivo que los motores modernos de JavaScript pueden controlar. Los objetos de archivo heredan de Blob. También puedes recuperar imágenes y archivos como objetos Blob a través de XMLHttpRequest. Consulta el estado de implementación.
Almacenamiento de un objeto blob en IndexedDB
No hay forma de detectar la disponibilidad de los blobs en IndexedDB. Básicamente, debes usar try-catch y, luego, usar una cadena en lugar de un objeto Blob si no está disponible. A continuación, se muestra 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 con blobs para IndexedDB también está disponible en Firefox y en Internet Explorer. Se debe investigar la compatibilidad con Safari.
¡Que lo disfrutes!