IndexedDB 如何修复“未捕获的TypeError:无法在“URL”上执行“createObjectURL”:找不到与提供的签名匹配的函数,”

hwazgwia  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(209)

当我尝试检索和播放存储在indexedDB中的视频文件(blob)时,我收到了该错误消息。我基本上打开了一个到数据库的事务,获取文件,然后将源对象分配给HTML视频元素。
基本上,我设法将视频存储在indexedDB中,现在我想做的是在浏览器中检索和播放视频文件。我收到了错误消息。我做了一些阅读,发现这可能是由于“createObjectURL”的反对,但我不确定如何将新方法与我的代码配合。

<script type="text/javascript"> 

      (function () {

        if (!('indexedDB' in window)) {
  console.log('This browser doesn\'t support IndexedDB');
  return;
}
    // IndexedDB
    window.indexedDB = window.indexedDB || window.webkitIndexedDB || 
                       window.mozIndexedDB || window.OIndexedDB || 
                       window.msIndexedDB,
    IDBTransaction = window.IDBTransaction || 
                     window.webkitIDBTransaction ||
                     window.OIDBTransaction || window.msIDBTransaction,
    dbVersion = 1.0;
 
    var indexedDB = window.indexedDB;
 
    // Create/open database
    var request = indexedDB.open("Syafunda_Videos");
     
    request.onerror = function (event) {
        // Failed to Open the indexedDB database
    };
 
    request.onsuccess = function (event) {
        db = request.result;
         
        // Open a transaction to the database
        var transaction = db.transaction(["Videos"], "readwrite");
 
        //Retrieve the video file
        transaction.objectStore("Videos").get("1").onsuccess = function (event) {        
        var videoFile = event.target.result;
        var URL = window.URL || window.webkitURL;
        var videoURL = URL.createObjectURL(videoFile) ;
                       
         // Set video src to ObjectURL        
        var videoElement = document.getElementById("video");
            videoElement.setAttribute("src", videoURL);
 
        var mimeDisplayElement = document.getElementById("vidMimeDisplay");
            mimeDisplayElement.innerHTML = videoFile.type;
        };
    }
})();

</script>
mctunoxg

mctunoxg1#

问题很可能与videoFile是什么有关。
URL.createObjectURL需要一个Blob对象来为您生成一个URL,但很可能videoFile是一个常规JavaScript对象,其中所讨论的视频是该对象上的一个属性。
你可能会有

videoFile = {
    [primaryKey]: "1",
    yourVideo: Blob(...)
};

您的文档是如何存储的?您可能需要进一步从event.target.result对象中提取视频文件。

相关问题