现在大多数浏览器都支持IndexedDB将数据/文件直接存储为文件、Blob或ArrayBuffer。
此代码将IDB密钥'File1‘保存为文件
<input type="file" id="userfile" />
var a = document.getElementById("userfile");
var b = a.files[0];
现在,我们可以使用以下代码将此文件直接保存到IDB
//LocalForage is a library for indexedDB developed by Mozilla
//Note: localforage._config.driver=asyncStorage (IDB method)
function run(){
//"File1" = IDB data table key and b=value
localforage.setItem("File1", b, function(err, value) {
console.log(err)
});
}
a.onchange = function(){
run()
}
此代码将IDB键'BlobFile‘保存为Blob
mb = new Blob([b],{type:b.type});
function runB(){
localforage.setItem("BlobFile", mb, function(err, value){
console.log(err)
});
}
a.onchange = function(){
runB()
}
我想知道将文件存储到IDB的最佳实践是什么。(文件/Blob/ArrayBuffer)
这些文件可以是图像或非常小的视频。
发布于 2015-08-13 17:38:15
我推荐使用Blob来处理图像和视频,因为API对于下载为blob并保存到db,以及从db中检索和创建src属性的URL都非常简单
请在此处查看此示例以获取实现https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
发布于 2015-08-16 07:12:59
这是一个有争议的问题,但我们可以在这里画出一些界限,我在这里引用MDN:
文件接口基于Blob,继承blob功能并对其进行扩展以支持用户系统上的文件。
因此,在文件和blob之间,这是一个需要的功能问题(我更喜欢blob,因为它更方便一些)。
现在在blob和ArrayBuffer之间,这是一个棘手的问题,因为它完全取决于您的需求,ArrayBuffer在某些情况下非常有用,但它是结构化的,它是一个
用于二进制数据的
定长容器
所以你的文件大小会有很大的不同。
另一个要点是,ArrayBuffer是在内存中的,而blob可以是任何位置,磁盘或内存,所以使用blob可能会大大减少开销。所以对你来说,伙计,斑点赢了。
顺便说一句,我不知道你到底想做什么,但是将整个文件存储在数据库中并不是一个好主意,除非你的目标是索引整个文件内容并查询它,因为,并不是所有的用户设备都能处理这种类型的过载,所以,如果你不需要内容,只索引文件名,这样可以节省时间和存储空间。
我希望这能帮到你。
https://stackoverflow.com/questions/31803363
复制相似问题