Сохранение ArrayBuffer в IndexedDB - PullRequest
5 голосов
/ 12 января 2012

Как я могу сохранить двоичные данные (в объекте ArrayBuffer) в IndexedDB?

В спецификации IndexedDB не упоминается ArrayBuffer - означает ли это, что она не поддерживается (и я должен упаковать ArrayBuffer как строку или массив?).

Ответы [ 2 ]

14 голосов
/ 16 июня 2012

Простое сохранение ArrayBuffer должно "просто работать".Я полагаю, что это происходит во всех текущих реализациях IndexedDB.

То есть что-то вроде:

var trans = db.transaction("mystore", IDBTransaction.READ_WRITE); // or "readwrite"
trans.objectStore("mystore").put(myArrayBuffer, "mykey");

Обнаружение того, что это определяется спецификациями, ... сложно ... по меньшей мере.Но это выглядит примерно так:

  • IndexedDB использует определение «структурированного клона» для всех хранимых данных.
  • «структурированный клон» определен в спецификации HTML5 и упоминает множествоТипы данных, родные для Javascript и некоторых других типов, таких как Файлы и BLOB-объекты.
  • Спецификация ArrayBuffer от Khronos определяет ArrayBuffers и указывает, что определение «структурированного клона» в HTML5 должно быть изменено также на клон ArrayBuffers.

Да, я знаю, я бы его тоже не нашел.

4 голосов
/ 12 января 2012

В последних (ночных) сборках 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");
};

even:

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

В Chrome есть такая же открытая ошибка: crbug.com / 108012

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...