(async () => { let file; { const db = await open(); const trans = db.transaction("foo", "readwrite"); const store = trans.objectStore("foo"); store.put(new Blob(["bar"]), "foo"); await complete(trans); db.close(); } { const db = await open(); const trans = db.transaction("foo", "readonly"); const store = trans.objectStore("foo"); file = await success(store.get("foo")); await complete(trans); db.close(); } { const db = await open(); const trans = db.transaction("foo", "readwrite"); const store = trans.objectStore("foo"); store.delete("foo"); await complete(trans); db.close(); } try { console.log(await fetch(URL.createObjectURL(file))); } catch (err) { console.log("fetch err", err); } try { console.log(await blobToBuffer(file)); } catch (err) { console.log("file reader err", err); } function blobToBuffer(blob) { return new Promise((resolve, reject) => { const reader = new FileReader; reader.onload = () => resolve(reader.result); reader.onerror = reject; reader.readAsArrayBuffer(blob); }); } function open() { return new Promise((resolve, reject) => { const request = indexedDB.open("ff-idb-blob-test", 1); request.onupgradeneeded = e => { e.target.result.createObjectStore("foo"); }; request.onsuccess = e => { resolve(request.result); }; request.onerror = reject; }); } function success(r) { return new Promise((resolve, reject) => { r.onsuccess = () => resolve(r.result); r.onerror = reject; }); } function complete(r) { return new Promise((resolve, reject) => { r.oncomplete = resolve; r.onerror = reject; }); } })();