如何允许用户在Firefox

时间:2016-07-06 16:43:54

标签: html5 firefox indexeddb

我目前在Firefox上使用IndexedDB来存储由web worker完成的某些文件处理的输出。我已经设法将完成的文件保存在IndexedDB中作为IDBMutableFile,但是我似乎无法将文件作为blob传输到Web UI,以便用户可以下载它。

当我从数据库中读取文件时,我尝试使用URL.createObjectURL来获取blob:链接,但是当onsuccess处理程序退出时,似乎文件句柄被取消引用(blob不再可通过一个链接)。

我还尝试使用FileReader保持文件句柄处于打开状态,但仍然无效(我得到了FileHandleInactiveError)。

有什么想法吗?唯一有效的方法似乎是将整个文件作为arrayBuffer读取,然后创建一个通过URL.createObjectURL链接的新blob。问题是该文件非常大(1GB)并将整个内容加载到内存中会导致NS_ERROR_OUT_OF_MEMORY异常。

以下是代码:

// Retrieve the file that was just stored
transaction.objectStore("files").get("00b6ac47-7400-4894-8a76-de597c4d7b3e").onsuccess = function (event) {
    var fileHandle = event.target.result;
    var theFile = fileHandle.getFile();


    theFile.onsuccess = function() {
        var actualFile = this.result;

        // Get window.URL object
        var URL = window.URL || window.webkitURL;
        var blobUrl = URL.createObjectURL(actualFile);

        // Set img src to ObjectURL
        var link = document.getElementById("blobLink");
        blobLink.setAttribute("href", blobUrl);

        //Problem: This link will point to a deleted blob in the UI

0 个答案:

没有答案