Search code examples
htmlfirefoxgoogle-chromeindexeddbarraybuffer

Saving ArrayBuffer in IndexedDB


How can I save binary data (in an ArrayBuffer object) into IndexedDB?

The IndexedDB spec doesn't mention ArrayBuffer - does that mean that is not supported (and I have to pack ArrayBuffer as a string or a an array?).


Solution

  • In the latest (nightly) builds of FF this is very easy. See 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");
    };
    

    even:

    objectStore.put({ name: "Santa", age: 400, height: 185, img: myblob});
    

    There's an open bug for the same in Chrome: crbug.com/108012