如何将二进制数据(在ArrayBuffer对象中)保存到IndexedDB中?
IndexedDB规范没有提到ArrayBuffer - 这是否意味着不支持(我必须将ArrayBuffer打包为字符串或数组?)。
答案 0 :(得分:14)
只需保存ArrayBuffer即可“正常工作”。我相信它在所有当前的IndexedDB实现中都有。
即。类似的东西:
var trans = db.transaction("mystore", IDBTransaction.READ_WRITE); // or "readwrite"
trans.objectStore("mystore").put(myArrayBuffer, "mykey");
发现这是由规范定义的......具有挑战性......至少可以说。但它是这样的:
是的,我知道,我也不会找到它。
答案 1 :(得分:4)
在最新的(夜间)FF版本中,这非常容易。请参阅this bug。
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
window.MozBlobBuilder;
var bb = new BlobBuilder();
bb.append(arrayBuffer);
var myblob = bb.getBlob();
indexedDB.open("mydatabase").onsuccess = function(e) {
var db = e.result;
var trans = db.transaction(["objectstore1", "objectstore2", READ_WRITE);
trans.objectStore("objectstore1").put(myblob, "somekey");
trans.objectStore("objectstore2").put(myblob, "otherkey");
};
甚至:
objectStore.put({ name: "Santa", age: 400, height: 185, img: myblob});
Chrome中有相同的漏洞:crbug.com/108012