HTML5离线存储。文件存储?目录和文件系统API

时间:2010-10-14 19:19:26

标签: html5 filesystems filereader filewriter

要离线存储数据,WebApp可以使用:

但显然没有文件存储。当然,有manifest-based caching,但它只是一个缓存,不应该用作用户数据存储。

这是否意味着WebApp的用户被迫使用某种云文件存储?

有没有办法在用户的本地计算机上保存大文件?或者也许某种方式来选择本地文件夹Web应用程序可以用来存储用户数据?

修改即可。安全。 HTML5已经能够将大部分数据写入用户的本地计算机。如果浏览器提供另一个基于文件的抽象来存储数据,我没有看到任何安全问题。它可以是一些虚拟机,虚拟文件​​系统,等等。

嗯,我想,有可能编写JS文件系统并将其作为blob存储在SQL中......

Similar questions

更新: 嗯...最近我找到了thisthis。也许这就是我正在寻找的......是的,它是!请参阅下面的答案。

7 个答案:

答案 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)

正如其他人所述,FileWriterFileSystem API可用于在浏览器标签/窗口的上下文中存储客户端计算机上的文件。

但是,您应该注意与这些API有关的一些事项:

  • API的实现目前仅存在于基于Chromium的浏览器(Chrome& Opera)
  • 这两个API于2014年4月24日从W3C标准轨道中删除,截至目前为专有
  • 将来可能会从实现浏览器中删除(现在专有的)API
  • 沙箱(磁盘上的文件无法生效的位置)用于存储使用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就是由这个人在这里维护:)。