バイナリ データ (ArrayBuffer オブジェクト内) を IndexedDB に保存するにはどうすればよいですか?
IndexedDB の仕様では ArrayBuffer について言及していません。つまり、サポートされていないということですか (また、ArrayBuffer を文字列または配列としてパックする必要がありますか?)。
バイナリ データ (ArrayBuffer オブジェクト内) を IndexedDB に保存するにはどうすればよいですか?
IndexedDB の仕様では ArrayBuffer について言及していません。つまり、サポートされていないということですか (また、ArrayBuffer を文字列または配列としてパックする必要がありますか?)。
ArrayBuffer を保存するだけで「うまくいく」はずです。私は、現在のすべての IndexedDB 実装でそれが行われていると信じています。
つまり、次のようなものです。
var trans = db.transaction("mystore", IDBTransaction.READ_WRITE); // or "readwrite"
trans.objectStore("mystore").put(myArrayBuffer, "mykey");
これが仕様によって定義されていることを確認するのは...難しいです...控えめに言っても. しかし、それは次のようになります。
ええ、私もそれを見つけられなかったでしょう。
FF の最新の (ナイトリー) ビルドでは、これは非常に簡単です。このバグを参照してください。
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