【问题标题】:Error "The object store currently does not support blob values" when trying to store file in indexedDB尝试在 indexedDB 中存储文件时出现错误“对象存储当前不支持 blob 值”
【发布时间】:2014-03-03 14:19:13
【问题描述】:

我正在尝试使用 IndexedDB 在 javascript 中进行存储来存储 blob。 这是我的代码

var Storage = (function () {
    function Storage(callback) {
        var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB, IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction, dbVersion = 1.0;

        this.URL = window.URL || window.webkitURL;

        var request = indexedDB.open('files', dbVersion);
        var self = this;

        request.onerror = function (e) {
            console.log("Error creating/accessing IndexedDB database");
        };

        request.onsuccess = function (e) {
            console.log("Success creating/accessing IndexedDB database");
            self.db = request.result;

            self.db.onerror = function (event) {
                console.log("Error creating/accessing IndexedDB database");
            };

            // Interim solution for Google Chrome to create an objectStore. Will be deprecated
            if (self.db.setVersion) {
                if (self.db.version != dbVersion) {
                    var setVersion = self.db.setVersion(dbVersion);
                    setVersion.onsuccess = function () {
                        self.createObjectStore(self.db);
                        callback();
                    };
                } else {
                    callback();
                }
            } else {
                callback();
            }
        };

        // For future use. Currently only in latest Firefox versions
        request.onupgradeneeded = function (e) {
            self.createObjectStore(e.target.result);
        };
    }
    Storage.prototype.createObjectStore = function (db) {
        console.log('Creating objectStore');
        db.createObjectStore('files');
    };

    Storage.prototype.putFile = function (fileName, blob) {
        console.log('Putting file in IndexedDB');
        var transaction = this.db.transaction(['files'], 'readwrite');
        var put = transaction.objectStore('files').put(blob, fileName);
    };

    return Storage;
})();

我就是这样用的:

var storage = new Storage(function () {
    var blob = new Blob(['FooBar']);
    storage.putFile('test', blob);
});

在 Chrome 上我得到:

DataCloneError: Failed to execute 'put' on 'IDBObjectStore': The object store currently does not support blob values.

在 Firefox 上我得到:

[Exception... "Data provided to an operation does not meet requirements."  code: "0" nsresult: "0x80660005 (DataError)"  location: "<unknown>"]

我不明白出了什么问题。

【问题讨论】:

    标签: javascript indexeddb


    【解决方案1】:

    我确实找到了我的问题的答案。好吧,我确实找到了解决问题的方法:“如何在 Firefox 中永久存储文件?”

    我发现了一个文件系统后备:https://github.com/ebidel/idb.filesystem.js

    效果很好。

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 2022-11-21
      • 1970-01-01
      • 2020-01-06
      • 2016-10-13
      • 1970-01-01
      • 2018-04-11
      • 2021-06-10
      • 2019-10-01
      相关资源
      最近更新 更多