W wersji deweloperskiej Chrome dodano obsługę obiektów Blob w IndexedDB.
To długo oczekiwana funkcja w Chrome, która umożliwia interfejsowi IndexedDB API przechowywanie i pobieranie obiektu Blob bez konwertowania go na ciąg znaków Base64.
IndexedDB zapewnia trwałe przechowywanie danych typu klucz-wartość na dużą skalę, które jest dostępne w większości nowoczesnych przeglądarek (Safari najprawdopodobniej wprowadzi obsługę w iOS 8 i Mac OS X 10.10). Sprawdź stan implementacji.
Blob to obiekt binarny podobny do pliku, który mogą obsługiwać nowoczesne silniki JavaScript. Obiekty pliku dziedziczą z Blob. Obrazy i pliki możesz też pobierać jako bloby za pomocą XMLHttpRequest. Sprawdź stan implementacji.
Przechowywanie obiektu blob w IndexedDB
Nie ma możliwości wykrycia dostępności obiektu Blob w IndexedDB. W podstawie musisz użyć instrukcji try-catch, a jeśli Blob jest niedostępny, użyj ciągu znaków zamiast Bloba. Oto przykładowy kod:
// 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);
}
Obsługa blobów w IndexedDB jest już dostępna w Firefox i Internet Explorerze. Musimy zbadać obsługę Safari.
Miłej zabawy!