Chrome 開發人員版已支援 IndexedDB 上的 Blob。
這是 Chrome 使用者期待已久的功能,可讓 IndexedDB API 儲存及擷取 Blob,而無需將 Blob 轉換為 Base64 字串。
IndexedDB 提供大型鍵/值類型永久性儲存空間,可在大多數新式瀏覽器上使用 (Safari 顯然會在 iOS 8 和 Mac OS X 10.10 中提供支援)。查看導入狀態。
Blob 是類似檔案的二進位物件,可由現代 JavaScript 引擎處理。檔案物件會繼承 Blob。您也可以透過 XMLHttpRequest 擷取圖片和檔案做為 Blob。查看導入狀態。
在 IndexedDB 中儲存 Blob
無法在 IndexedDB 中偵測 Blob 是否可用。您基本上必須使用 try-catch,然後在 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);
}
Firefox 和 Internet Explorer 也已支援 IndexedDB 的 Blob。需要調查 Safari 支援功能。
歡迎多加利用!