Chrome Dev ha ottenuto il supporto per Blob su IndexedDB.
Si tratta di una funzionalità attesa da tempo per Chrome che consente all'API IndexedDB di archiviare e recuperare un Blob senza convertirlo in una stringa Base64.
IndexedDB fornisce un'archiviazione permanente su larga scala con tipo valore-chiave disponibile sulla maggior parte dei browser moderni (a quanto pare Safari supporterà iOS8 e Mac OS X 10.10). Controlla lo stato di implementazione.
Blob è un oggetto binario simile a un file che i motori JavaScript moderni possono gestire. Gli oggetti file ereditano da Blob. Puoi anche recuperare immagini e file come Blob tramite XMLHttpRequest. Controlla lo stato di implementazione.
Archiviazione di un BLOB su IndexedDB
Non è possibile rilevare tramite funzionalità la disponibilità di Blob in IndexedDB. Essenzialmente devi provare a catch e utilizzare la stringa anziché Blob se non è disponibile. Ecco alcuni esempi di codice:
// 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);
}
Il supporto di Blob per IndexedDB è già disponibile anche su Firefox e Internet Explorer. È necessario verificare il supporto di Safari.
Buon divertimento!