Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript indexedDB的每记录大小限制是多少?_Javascript_Html_Indexeddb - Fatal编程技术网

Javascript indexedDB的每记录大小限制是多少?

Javascript indexedDB的每记录大小限制是多少?,javascript,html,indexeddb,Javascript,Html,Indexeddb,我正在为HTML5构建一个文件存储,我使用indexedDB作为存储,我通过xmlHttpRequest从服务器请求文件,响应类型为arrayBuffer(对于chrome)和blob(对于其他浏览器) 即使文件集合大小为500MB或更大,一切都很好(嘿,它甚至可以达到GB)。但是当我将文件添加到indexedDB时,我注意到了一些奇怪的事情,当单个文件超过~120MB时,它会触发错误,因此它不会被存储。但是当文件小于120MB时,它将存储它 请注意,仅当存储一个大于120MB的文件时才会出现此

我正在为HTML5构建一个文件存储,我使用indexedDB作为存储,我通过xmlHttpRequest从服务器请求文件,响应类型为arrayBuffer(对于chrome)和blob(对于其他浏览器)

即使文件集合大小为500MB或更大,一切都很好(嘿,它甚至可以达到GB)。但是当我将文件添加到indexedDB时,我注意到了一些奇怪的事情,当单个文件超过~120MB时,它会触发错误,因此它不会被存储。但是当文件小于120MB时,它将存储它

请注意,仅当存储一个大于120MB的文件时才会出现此错误,例如,200MB的.mp4文件将触发错误,但如果我有5个视频,每个视频的大小都为100MB(因此总大小将为500MB),则一切正常

我想知道这是一个限制规则还是一些小故障,两者都有相同的错误。我没有找到任何关于它的文档。我在IE和Chrome中进行了测试

编辑: 好的,我在存储文件时在indexedDB的add或put函数中发现了这个错误:

在e.target.error.message中:


序列化值太大(size=140989466字节,max=133169152字节)

我认为这是您的浏览器实现IndexedDB的一个问题。我自己在Firefox中也遇到了同样的错误,当时我试图将一个100 MB的文件存储到IndexedDB记录中,但相同的代码在Chrome中运行良好。不同的浏览器似乎有不同的实现怪癖和限制


就我个人而言,我怀疑这是Firefox中的一个bug,因为Firefox授予了请求的大小,但随后阻止了对整个大小的单记录使用,而Chrome则更为宽容。

在提出这个问题时,Chrome仍然不支持将blob保存到IndexedDB,它说

对于现在面临相同问题的任何人,直接存储blob或文件,而不是ArrayBuffers

与ArrayBuffers相反,将Blob保存到IDB不需要序列化其数据,只需创建js对象的快照并保留指向相同基础字节序列的链接,而该字节序列本身并没有被克隆。
你应该面对的唯一限制是


代码取自Chrome的公告:

var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

// Store the object  
var req = store.put(blob, 'blob');
req.onerror = function(e) {
    console.log(e);
};
req.onsuccess = function(event) {
    console.log('Successfully stored a blob as Blob.');
};

为什么要将文件存储在数据库中?数据库绝对不适合用于文件存储。尤其不适用于大型文件。这些文件是动态文件,因此无法缓存清单。WebSQL不再开发,文件系统API只在Chrome@Cerbrus:假设此人正在IndexedDB中存储文件,因为除了IndexedDB之外,没有其他地方可以存储文件(将数据向上移动到服务器并不总是可能的,甚至是不可取的)。由于Mozilla和W3C对提议的Chrome HTML5文件系统不感兴趣,而是提倡使用indexedDB,他们应该期望开发人员尝试使用indexedDB存储大量数据,因此,这样做应该是有可能的,而不会遇到一个任意的限制,迫使开发人员在IndexedDB之上构建一个hack来处理这些限制。我们也面临着同样的问题。我们必须使用IndexedDB支持离线场景。我们需要使一些文件脱机可用,因此必须存储在IndexedDB中。这是用Chrome硬编码的max=133169152字节吗?这个问题是我在搜索相同问题时提出的。我需要在idb中离线时存储用户视频捕获。我认为@Eric的观点是正确的,因为没有存储选项,idb强加的大小限制使得程序员进行黑客编码来解决相当简单的问题。你试图存储什么类型的对象?Blob/File还是ArrayBuffer?