HTML5离线存储。文件储存?目录和文件系统API
-
30-09-2019 - |
题
存储数据的离线网络应用程序可以使用:
- 会议的储存,"高级版本的饼干"
- key/value基础 网络的储存 (又名地方/全球/离线/DOM储存)
- 基于sql 网SQL数据库 (deprecated)和 索引的数据库API
- FileReader 和 FileWriter API (需要用户选择的文件,每次的应用程序负荷)
但显然,没有文件存储。当然,还有一个 基于清单的缓存, 但这只是一个缓和是不应该被用来作为用户的数据存储。
这是否意味着用户的网络应用程序是强制使用某些种类的云的文件存储?
是否有任何方式以保存大型上的文件用户当地机?或者也许某种方式选择一个地方文件夹网络应用程序可以使用存储用户的数据?
编辑.安全。HTML5已经有能力编写大部分的数据用户的地方机。我看不到任何安全问题,如果浏览器将提供另一种基于文件的抽象存储的数据。它可以是一些虚拟机、虚拟文件系统,无论。
嗯,我认为,它可以编写JS文件系统和存储它作为一个blob in SQL...
解决方案
最后,我已经找到了!这里的答案:
埃里克Uhrhane的谷歌一直 工作上的工作草案 文件API:目录和系统规范 它定义了一组 Api创建一个沙盒文件系统 其中一个网络应用程序可以阅读和写 数据。
哇!我太激动了!
其他提示
为什么不用 localStorage
虽然用户编辑的文件和 FileWriter
API当他们想要拯救它向盘?大多数人都习惯于看到一个保存对话弹出当保存一个文件。
唯一的方案,我可以认为,逮捕令userless访问 FileWriter
API是一个自动特征,但是自动保存给 localStorage
可能是正好。
有一种方法可以节省相对较大的文件用户的硬盘驱动器如果你愿意使用闪光灯。看看Downloadify:
http://www.bitrepository.com/downloadify-client-side-file-generation.html
Downloadify可以让你送数据SWF和有SWF创建一个文件在用户机。我的建议是将储存的数据通过的方法之一,你列出的存储空,源码数据库等。把所有你的资产,包括SWF清单文件中的所以一切都是缓存在本地的浏览器。然后你可以拉动的信息数据库或存储空和使用SWF创造所需文件。
我不知道如果你将能够阅读这些文件回到你的网页应用程序。
另一种选择,以节省的数据是通过使用链路标记与 数据URI方案.但是,我不确定如果它是支持在所有主要浏览器的时刻。
出于安全原因,你不能写的文件用户当地文件系统的情况下,它被用于恶毒的目的邪恶的人。
那是不可能改变,这是一个好事。
5文件系统API开始着陆在铬8和相当完整的,因为现在的(铬11条)。
那里有一个很好的教程上就在这里: http://www.html5rocks.com/tutorials/file/filesystem/
http://fsojs.com 包裹文件系统API有效,如果你想要一个简单的解决方案
正如其他人在这里, FileWriter 和 文件系统 Api可以用来储存文件上的客户的机从上下文的浏览器的标签/窗口。
然而,有几件事情有关这些Api你应该知道的:
- 实现Api目前只存在于铬基于浏览器(铬和歌剧)
- 两个Api采取的W3C标准的轨道上月24日,2014年,现在的专有
- 除的(现在的专有的)Api执行浏览器在未来的一种可能性
- 一个 沙箱 (一个磁盘上的位置以外的哪些文件可以产生任何效果)用于储存文件建立的Api
- 一个 虚拟文件系统 (一目录的结构,该结构并不一定存在磁盘上以相同的形式,它并访问时从内的浏览器)用代表该文件的创建与Api
IsolatedStorage, ,其中没有提及作为尚未,也允许文件i/o从tab/窗口方面,但它可通过仅仅通过Silverlight和需要使用 托管的代码 访问。这样的文件系统,还存在着在沙盒中并使用一个虚拟的文件系统。
鉴于市场渗透的铬基于浏览器。(支持,足够有趣的是,已经下降了这样的浏览器),则可能找到一个解决方案,它使用的第一次上述办法提供在客户机令人满意的。
BakedGoods, 一Javascript库,建立一个统一界面,可用于进行共同的储存业务的所有司机(包括文件系统),以及一些非土(包括IsolatedStorage)的储存设施,是一例这样的一个解决方案:
//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem", "silverlight"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
只是为了完全透明的,BakedGoods是保持通过这家伙就在这里:).