Chrome Dev получил поддержку Blob в IndexedDB.
Это долгожданная функция для Chrome, которая позволяет API IndexedDB сохранять и извлекать BLOB-объекты без преобразования их в строку Base64.
IndexedDB предоставляет крупномасштабное постоянное хранилище типа «ключ-значение», доступное в большинстве современных браузеров (Safari, по всей видимости, получит поддержку в iOS8 и Mac OS X 10.10). Проверьте статус его реализации .
Blob — это двоичный объект, похожий на файл, который могут обрабатывать современные движки JavaScript. Объекты File наследуются от Blob. Вы также можете получать изображения и файлы как Blob через XMLHttpRequest. Проверьте статус его реализации .
Хранение BLOB-объекта в IndexedDB
В IndexedDB нет способа определить доступность Blob. По сути, вам нужно попробовать поймать, а затем использовать строку вместо Blob, если он недоступен. Вот пример кода:
// 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);
}
Поддержка Blob для IndexedDB уже доступна в Firefox и Internet Explorer. Поддержка Safari должна быть изучена.
Наслаждаться!