FileSystem提供了文件夹和文件的创建、移动、删除等操作,大大方便了数据的本地处理, 而且所有的数据都是在沙盒(sandboxed)中,不同的web程序不能互相访问,这就保证了数据 的完整和安全。
在CatWrite项目中,运用了HTML5的这个特性进行数据的存储,很是方便,只是目前来说只有 Chrome浏览器对FileSystem API支持的比较好,所以只能运行在Chrome浏览器中。
在完成这个功能的时候,查阅了很多资料,有一些资料是一年前的,但是随着浏览器版本的 变化,一些代码已经老化,在这里一一总结和整理。这里只列举了项目中用到的API,算是 对完成功能的一次梳理。
申请空间
为了进行数据的存储,必须要向浏览器进行申请,如果是永久存储还会向用户进行询问,只有 同意后才会继续执行。
首先必须要声明想要的权限。
但是这是有个问题,这样做的话每次加载页面都会申请,这肯定不是我们想要的,我们要 的是在有数据的时候就可以读取数据。
判断是否申请过空间
所以我们需要读取浏览器的数据,看看是否已有存储。这就用到了另一个API:
我们可以通过判断remaining参数来判断是否有申请空间,如果没有申请,则返回上一步申请空间。 如果已经有空间的话,则需要得到空间的跟文件,这样才能操作数据。
获取文件入口
FileSystem使用了特殊的文件系统和沙盒模式,在电脑上或者其他web中是无法访问沙盒中的文件的 ,只能用对应的格式去访问。
在浏览器中输入:
?filesystem:http://catcoder.com/persistent/
这样可以访问catcoder.com这个网站在本机永久数据,把persistent换成temporary则是读取临时空间。
然后我们就可以通过URL和对应API获取文件的入口(Lets you look up the entry for a file or directory with a local URL)。