--- title: 文件系统API的基本概念 slug: WebGuide/API/File_System/Introduction translation_of: Web/API/File_and_Directory_Entries_API/Introduction ---
本文是对Basic_Concepts_About_the_Filesystem_API一文的译文。
文件系统API(File System API)模拟网络应用程序可以导航到的本地文件系统。你可以开发应用在一个沙盒的虚拟文件系统中读、写、创建以及索引文件。
该文件系统API与其他相关的API交互。它基于文件写入API(File Writer API),而后者又基于文件API(File API)。每一个API都具有不同的功能。这些API对于网络应用而言是一个巨大的进化飞跃,使得它们能够缓存和处理大量级的数据。
这篇介绍讨论了文件系统API中的基本概念和术语。它将给出一个大致的蓝图并引导你理解其中的 关键概念. 它也描述了一些限制,如果你忽略了它们将额能产生安全错误。关于该API中使用的更多术语,查看定义部分.
关于文件系统API的引用文献部分,查看引用 的登陆页及其子页.
该规范仍然在定义中并可能会变更.
文件系统API包括异步和同步两种接口。异步API可以应用于当你不想操作锁定UI的情况。另一方面,同步API允许简单的程序模型,但它必须和WebWorkers一起使用.
文件系统API的重要性体现在以下方面:
关于你用该api能够创建的特性示例,查看 使用示例 部分.
文件系统API是一些其他存储API,例如 IndexedDB, WebSQL(已于2010年9月18日起弃用),以及AppCache等的替代品。该API对于那些处理blob的应用而言是一种更好的选择,因为:
下面是关于你可以如何使用文件系统API的几个示例:
在开始使用文件系统API之前,你需要理解几个概念:
该API不会使你能够访问本地文件系统,该沙盒也并不是文件系统的一部分。相反,它是一个虚拟的文件系统,对于网络应用而言它就像是一个成熟的文件系统。它不需要在浏览器之外与本地文件系统产生任何关系。
这 就意味着,一个网络应用和一个桌面应用不能在同时共享同一个文件。该API不能使你的网络应用脱离浏览器接触到文件,而桌面应用可以。然而,你可以从一个 网络应用中导出一个文件到桌面应用。例如,你可以使用文件API,创建blob, 重定向一个iframe指向该blob, 并调用下载管理器。
一个应用可能需要临时或固定的存储。临时存储相对容易获得,因为浏览器已经提供了;但它是受到限制并可能在空间耗尽时被浏览器删除。另一方面,固定存储可以为你提供更大的空间并只能被用户删除,但它需要用户获得你的许可。
使用临时存储进行缓存,而用固定存储来保存那些你希望你的应用保存的类似用户产生的或独特的数据。
为了防止一个网络应用占用整个磁盘,浏览器可能会给每一个应用限定配额并分配存储。
存储空间如何分配以及你可以如何管理存储是浏览器的特性,因此你需要查阅浏览器各自的文档。例如,Google Chrome在规范中允许超过5MB的临时存储并支持配额管理API. 了解更多关于Chrome的实现,查看管理HTML5线下存储.
文件系统API拥有异步和同步两种版本。两种版本的API提供相同的功能和特性。事实上,它们基本相同,除了几个不同点以外。
requestFileSystem()
和 resolveLocalFileSystemURL()
. 这些方法同时是window对象和worker全局作用域的成员。另一方面,同步API使用如下方法:requestFileSystemSync()
和 resolveLocalFileSystemSyncURL()
. 这些同步方法只是worker全局作用域的成员,而非window对象的。对于一些任务而言同步API可能更简单一些。它直接的,顺序编程的模块可以让代码更易于阅读。其缺点在于它必须与Web Worker交互,而后者有一些限制。
当使用异步API时,务必总是使用错误回调。虽然对于相关的方法而言错误回调是可选参数,但是明智的做法是把它们当成必选的。至少,通过处理错误得到的错误信息,你可以知道发生了什么。
文件系统API被设计用于在网络平台上与其他API以及元素交互。例如,你可能使用到如下内容之一:
input
元素(用于从该元素编程得到文件列表)
出于安全的原因,浏览器对于文件的访问施加了一些限制。如果你忽略它们,将会产生安全错误。
一个源是脚本执行的文档的URL的域,应用层协议和端口。每一个源拥有它自己关联的一组文件系统
文件系统上作出的安全限定阻止应用访问不同源的数据。这保护了私有数据以防被访问或删除。例如,当一个应用或页面在http://www.example.com/app/上时,它能访问位于http://www.example.com/dir/上的文件,因为它们拥有相同的源,它不能得到位于http://www.example.com:8080/dir/ (不同端口)或https://www.example.com/dir/ (不同协议)上的文件。
为防止恶意的应用运行可执行文件,你不能在文件系统API的沙盒中创建可执行文件。
因为文件系统是沙盒的,一个网络应用不能访问另一个应用的文件。你也不能读写用户硬盘中任意文件夹中的文件。
你不能在本地通过file://来运行你的应用。如果你那么做了,浏览器将抛出错误,或者你的应用会静默地失败。这一限制也同样针对许多其他的文件API,包括BlobBuilder和FileReader。
出于测试的目的,你可以在Chrome中通过在启动时添加--allow-file-access-from-files参数来绕开这一限制,这一参数仅用于这个目的。
这一部分定义和解释了文件系统API中使用的术语.
规范:http://dev.w3.org/2009/dap/file-system/pub/FileSystem/
相关文档: