要离线存储数据,WebApp可以使用:
但显然没有文件存储。当然,有manifest-based caching,但它只是一个缓存,不应该用作用户数据存储。
这是否意味着WebApp的用户被迫使用某种云文件存储?
有没有办法在用户的本地计算机上保存大文件?或者也许某种方式来选择本地文件夹Web应用程序可以用来存储用户数据?
修改即可。安全。 HTML5已经能够将大部分数据写入用户的本地计算机。如果浏览器提供另一个基于文件的抽象来存储数据,我没有看到任何安全问题。它可以是一些虚拟机,虚拟文件系统,等等。
嗯,我想,有可能编写JS文件系统并将其作为blob存储在SQL中......
答案 0 :(得分:17)
最后,我找到了它!这是答案:
I’ll have the DOMFileSystem with a side of read/write access please写道:
谷歌的Eric Uhrhane一直都是 致力于工作草案 File API: Directories and System specification定义了一组 用于创建沙盒文件系统的API Web应用程序可以读写的地方 数据到。
哇!我很兴奋!
答案 1 :(得分:6)
为什么不在用户编辑文档时使用localStorage
,而在用FileWriter
API将其保存到磁盘时?大多数人习惯于在保存文档时弹出保存对话框。
我能想到的唯一可以保证无法访问FileWriter
API的情况是自动保存功能,但对localStorage
进行自动保存可能同样出色。
答案 2 :(得分:3)
如果您愿意使用Flash,可以将相对较大的文件保存到用户硬盘。请查看Downloadify:
http://www.bitrepository.com/downloadify-client-side-file-generation.html
Downloadify允许您将数据发送到SWF并让该SWF在用户计算机上创建文件。我的建议是通过您列出的方法之一,Webstorage,sqlite数据库等存储数据。将所有资产(包括SWF)放入清单文件中,以便将所有内容缓存在本地缓存到浏览器中。然后,您可以从数据库或webstorage中提取信息,并使用SWF创建所需的文件。
我不确定您是否能够将这些文件读回您的网络应用程序。
保存数据的另一个选择是使用带有data URI scheme的链接标记。但是,我不确定目前是否所有主流浏览器都支持它。
答案 3 :(得分:2)
出于安全原因,您不能将文件写入用户的本地文件系统,以防它被邪恶的人用于恶意目的。
这不太可能改变,这是一件好事。
答案 4 :(得分:1)
HTML5 FileSystem API开始登陆Chrome 8,截至目前相当完整(Chrome 11)。
这里有一个很好的教程:http://www.html5rocks.com/tutorials/file/filesystem/
答案 5 :(得分:0)
http://fsojs.com会有效地包装FileSystem API
答案 6 :(得分:0)
正如其他人所述,FileWriter和FileSystem API可用于在浏览器标签/窗口的上下文中存储客户端计算机上的文件。
但是,您应该注意与这些API有关的一些事项:
IsolatedStorage,尚未被提及,也允许来自标签/窗口上下文的文件i / o,但它仅通过Silverlight提供,并且需要使用{ {3}}访问。它与FileSystem一样,也存在于沙箱中并使用虚拟文件系统。
鉴于基于Chromium的浏览器和Silverlight的市场渗透率很高(支持,有趣的是这些浏览器已被删除),您可能会找到一种解决方案,该解决方案使用客户端计算机上可用的上述第一种方法
managed code,一个Javascript库,用于建立可用于在所有本机(包括FileSystem)中执行常见存储操作的统一接口,以及一些非本机(包括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就是由这个人在这里维护:)。