Javascript Can';t将blob保存到indexedDB

Javascript Can';t将blob保存到indexedDB,javascript,google-chrome-extension,blob,indexeddb,Javascript,Google Chrome Extension,Blob,Indexeddb,我在IndexedDB中保存blob时遇到问题,并且仅使用blob。 如果我保存了其他内容(如image as base64),则一切正常。 但对于blob,只保存了空对象属性 控制台屏幕截图: 代码: //prepared blob... var openRequest = indexedDB.open("testDB",1); openRequest.onupgradeneeded = function(e) { var thisDB = e.target.result;

我在IndexedDB中保存blob时遇到问题,并且仅使用blob。
如果我保存了其他内容(如image as base64),则一切正常。
但对于blob,只保存了空对象属性

控制台屏幕截图:

代码:

//prepared blob...
var openRequest = indexedDB.open("testDB",1);

openRequest.onupgradeneeded = function(e) {
    var thisDB = e.target.result;

    if(!thisDB.objectStoreNames.contains("stash")) {
        thisDB.createObjectStore("stash");
    }
}

openRequest.onsuccess = function(e) {
    db = e.target.result;

    var transaction = db.transaction(["stash"],"readwrite");
    var store = transaction.objectStore("stash");
    var tID = Date.now();

    var obj = {
        bl:blob,
        created:tID
    }
    console.log(obj);
    //add it 
    var request = store.add(obj, tID);
    request.onerror = function(e) {
        console.log("Error",e.target.error.name);
    }
    request.onsuccess = function(e) {
        console.log("success");
    }
}
openRequest.onerror = function(e) {
    //....
}
我还尝试只保存blob(不包装为obj属性),它是一样的。
我可以将blob保存到HDD,如果我将obj记录在控制台中,我会得到:

所以我想,blob是有效的,问题在于将它添加到indexedDB中。我刚接触blob/indexedDB,可能犯了一些noob错误

有人能告诉我,我做错了什么


PS:完全没有错误消息

您可以将Blob或File对象转换为ArrayBuffer对象或binarystring,然后保存它。从indexedDB读取后,将其转换回Blob

//prepared blob...
blobToBlob2(blob, saveBlob2);

function blobToBlob2(blob, callback){
    var reader = new FileReader();
    reader.readAsArrayBuffer(blob);
    reader.onload = function(e) {
        callback({
            buffer: e.target.result,
            type: blob.type
        });
    };
}

function blob2ToBlob(blob2){
    return new Blob([blob2.buffer],{type:blob2.type});
}

function saveBlob2(blob2){
    //..... code
    var obj = {
        bl:blob2,
        created:tID
    }
    var request = store.add(obj, tID);
    //..... code
}

非常老的问题,但现在支持在IndexedDb中保存blob:

//创建一个示例Blob对象
var blob=new blob(['blob object'],{type:'text/plain'});
试一试{
var store=db.transaction(['entries','readwrite')。objectStore('entries');
//存储对象
var req=store.put(blob,'blob');
req.onerror=功能(e){
控制台日志(e);
};
req.onsuccess=函数(事件){
log('成功地将blob存储为blob');
};
}捕获(e){
var reader=new FileReader();
reader.onload=函数(事件){
//异常之后,您必须从获取事务开始。
var store=db.transaction(['entries','readwrite')。objectStore('entries');
//获取数据URL字符串
var数据=event.target.result;
var req=store.put(数据'blob');
req.onerror=功能(e){
控制台日志(e);
};
req.onsuccess=函数(事件){
log('成功地将blob存储为字符串');
};
};
//将Blob转换为DataURL字符串
reader.readAsDataURL(blob);
}

截至发帖之时,参考文档的最后更新日期为:
最后更新日期为2019-03-20 UTC。

>IndexedDB在Chrome中有许多Blob错误。@wOxxOm ok,tnx指出Chrome开发者控制台在检查存储/索引时可能没有显示Blob。你有没有试过编写代码来读取值并通过编程检查它?@JoshuaBell没有,当我试图读取它时(从代码调用它,并对它做一些处理),它也是空的…如果这是你要问的…同时对chromium做了一些更改,也许他们也解决了这个问题……我不能再测试它了。我现在已经完全退出了这个项目,但我打算在有时间的时候再回去(那是半年前的事了)。blob indexedDB的全部目的是保存大型图像(SS),而不是使用DataURI来存储chrome.storage。塔克斯