O Chrome Dev oferece suporte a Blob no IndexedDB.
Esse é um recurso há muito esperado para o Chrome que permite que a API IndexedDB armazene e recupere um Blob sem convertê-lo em uma string Base64.
O IndexedDB oferece armazenamento persistente de tipo chave-valor em grande escala, disponível na maioria dos navegadores modernos. O Safari aparentemente terá suporte no iOS8 e no Mac OS X 10.10. Confira o status da implementação.
Blob é um objeto binário semelhante a um arquivo que os mecanismos JavaScript modernos podem processar. Os objetos de arquivo herdam do Blob. Também é possível buscar imagens e arquivos como Blob usando XMLHttpRequest. Confira o status da implementação.
Como armazenar um blob na IndexedDB
Não há como detectar a disponibilidade do Blob no IndexedDB. Basicamente, você precisa usar try-catch e usar string em vez de Blob se ele não estiver disponível. Confira um exemplo de código:
// 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);
}
O suporte a blobs para IndexedDB já está disponível no Firefox e no Internet Explorer. O suporte do Safari precisa ser investigado.
Aproveite!