文件系统API的基本概念

文件系统API(File System API)模拟网络应用程序可以导航到的本地文件系统。你可以开发应用在一个沙盒的虚拟文件系统中读、写、创建以及索引文件。

该文件系统API与其他相关的API交互。它基于文件写入API(File Writer API),而后者又基于文件API(File API)。每一个API都具有不同的功能。这些API对于网络应用而言是一个巨大的进化飞跃,使得它们能够缓存和处理大量级的数据。

关于这篇文档EDIT

这篇介绍讨论了文件系统API中的基本概念和术语。它将给出一个大致的蓝图并引导你理解其中的 关键概念. 它也描述了一些限制,如果你忽略了它们将额能产生安全错误。关于该API中使用的更多术语,查看定义部分.

关于文件系统API的引用文献部分,查看引用 的登陆页及其子页.

该规范仍然在定义中并可能会变更.

概要EDIT

文件系统API包括异步同步两种接口。异步API可以应用于当你不想操作锁定UI的情况。另一方面,同步API允许简单的程序模型,但它必须和WebWorkers一起使用.

该API的用途

文件系统API的重要性体现在以下方面:

  • 它允许应用拥有涉及二进制大对象(blob)的线下和存储的特性。
  • 它能通过在后台预取资源并本地缓存从而优化应用的表现。
  • 它使你网络应用的用户能够直接编辑本地文件目录中的二进制文件。
  • 它提供了一种你的用户已经熟悉的存储API,正如他们所习惯的文件系统。

关于你用该api能够创建的特性示例,查看 使用示例 部分.

文件系统API和其他存储API

文件系统API是一些其他存储API,例如 IndexedDB, WebSQL(已于2010年9月18日起弃用),以及AppCache等的替代品。该API对于那些处理blob的应用而言是一种更好的选择,因为:

  • 文件系统API提供客户端存储以应对不在数据库中存储的应用场景。如果你需要大型可变的数据块,比数据库而言它就是一种更有效率的存储解决方案。
  • 尽 管Firefox支持IndexedDB的blob存储,但是目前Chrome并非如此(Chrome仍然在对IndexedDB的blob存储做实现支 持开发中)。如果你的应用面向Chrome并且你需要存储blobs, 那么文件系统API和App Cache将是你唯一的选择。然而,AppCache存储并不是本地可变的,并且不支持细粒度的客户端管理。
  • 在Chrome中,你可以使用文件系统API和配额管理API Quota Management API, 后者允许你请求更多的存储以及管理你的存储配额。

示例使用场景

下面是关于你可以如何使用文件系统API的几个示例:

  • 有上传器的应用

    • 当你选择一个文件或目录进行上传时,你可以赋值文件到一个本地沙河并一次上传一个块。
    • 应用可以在一次中断后重新上传,中断可能包括浏览器被关闭或崩溃,连接中断,或电脑被关闭。
  • 视频游戏或其他使用大量媒体资源的应用
    • 应用下载一个或多个大压缩包并在本地将他们解压到一个文件目录中。
    • 应用能在后台预取资源,从而让用户能够进入下一项工作或游戏等级,而不需要等待下载。
  • 音频或照片编辑器使用线下访问或本地缓存(有助于表现和速度)
    • 应用可以分段写入文件(例如只覆盖ID3/EXIF标签而不是整个文件)。
  • 线下视频浏览
    • 应用可以下载大文件(>1GB)用于以后浏览。
    • 应用可以访问只下载了部分的文件(因此你可以查看你的DVD的第一章,即使应用仍在下载剩余部分,或者当你需要取赶火车而没有完成下载时)。
  • 线下网络邮件客户端
    • 客户端下载附件并在本地存储它们。
    • 客户端缓存附件用于稍后的上传。

主要概念EDIT

在开始使用文件系统API之前,你需要理解几个概念:

文件系统API是一个文件系统的虚拟表现形式

该API不会使你能够访问本地文件系统,该沙盒也并不是文件系统的一部分。相反,它是一个虚拟的文件系统,对于网络应用而言它就像是一个成熟的文件系统。它不需要在浏览器之外与本地文件系统产生任何关系。

这 就意味着,一个网络应用和一个桌面应用不能在同时共享同一个文件。该API不能使你的网络应用脱离浏览器接触到文件,而桌面应用可以。然而,你可以从一个 网络应用中导出一个文件到桌面应用。例如,你可以使用文件API,创建blob, 重定向一个iframe指向该blob, 并调用下载管理器。

文件系统API可以使用不同的存储类型

一个应用可能需要临时或固定的存储。临时存储相对容易获得,因为浏览器已经提供了;但它是受到限制并可能在空间耗尽时被浏览器删除。另一方面,固定存储可以为你提供更大的空间并只能被用户删除,但它需要用户获得你的许可。

使用临时存储进行缓存,而用固定存储来保存那些你希望你的应用保存的类似用户产生的或独特的数据。

浏览器限定存储的配额

为了防止一个网络应用占用整个磁盘,浏览器可能会给每一个应用限定配额并分配存储。

存储空间如何分配以及你可以如何管理存储是浏览器的特性,因此你需要查阅浏览器各自的文档。例如,Google Chrome在规范中允许超过5MB的临时存储并支持配额管理API. 了解更多关于Chrome的实现,查看管理HTML5线下存储.

文件系统API拥有异步和同步两种版本

文件系统API拥有异步和同步两种版本。两种版本的API提供相同的功能和特性。事实上,它们基本相同,除了几个不同点以外。

  • WebWorkers. 异步的API可以在文档或WebWorkers 上下文中使用, 而同步API只能用于WebWorkers.
  • Callbacks. 异步API不会将数据作为返回值;作为替代,你需要传递一个回调函数。你在操作中发送请求,并在回调时得到通知。相反,同步API不使用回调函数,因为API方法返回值。
  • 异步和同步API的全局方法. 异步API拥有这些全局方法:requestFileSystem() 和 resolveLocalFileSystemURL(). 这些方法同时是window对象和worker全局作用域的成员。另一方面,同步API使用如下方法:requestFileSystemSync() 和 resolveLocalFileSystemSyncURL(). 这些同步方法只是worker全局作用域的成员,而非window对象的。

对于一些任务而言同步API可能更简单一些。它直接的,顺序编程的模块可以让代码更易于阅读。其缺点在于它必须与Web Worker交互,而后者有一些限制。

当使用异步API时,务必使用错误回调

当使用异步API时,务必总是使用错误回调。虽然对于相关的方法而言错误回调是可选参数,但是明智的做法是把它们当成必选的。至少,通过处理错误得到的错误信息,你可以知道发生了什么。

文件系统API与其他API交互

文件系统API被设计用于在网络平台上与其他API以及元素交互。例如,你可能使用到如下内容之一:

  • XMLHttpRequest(例如传递file和blob对象的send()方法)
  • Drag & Drop API
  • Web Workers (对于同步版的文件系统API)
  • input 元素(用于从该元素编程得到文件列表)

文件系统API区分大小写

文件系统API区分大小写并保留大小写。

限制EDIT

出于安全的原因,浏览器对于文件的访问施加了一些限制。如果你忽略它们,将会产生安全错误。

文件系统API坚持同源策略

一个源是脚本执行的文档的URL的域,应用层协议和端口。每一个源拥有它自己关联的一组文件系统

文件系统上作出的安全限定阻止应用访问不同源的数据。这保护了私有数据以防被访问或删除。例如,当一个应用或页面在http://www.example.com/app/上时,它能访问位于http://www.example.com/dir/上的文件,因为它们拥有相同的源,它不能得到位于http://www.example.com:8080/dir/ (不同端口)或https://www.example.com/dir/ (不同协议)上的文件。

文件系统API不允许创建或重命名可执行文件

为防止恶意的应用运行可执行文件,你不能在文件系统API的沙盒中创建可执行文件。

文件系统是沙盒的

因为文件系统是沙盒的,一个网络应用不能访问另一个应用的文件。你也不能读写用户硬盘中任意文件夹中的文件。

不能通过file://来运行你的应用

你不能在本地通过file://来运行你的应用。如果你那么做了,浏览器将抛出错误,或者你的应用会静默地失败。这一限制也同样针对许多其他的文件API,包括BlobBuilder和FileReader。

出于测试的目的,你可以在Chrome中通过在启动时添加--allow-file-access-from-files参数来绕开这一限制,这一参数仅用于这个目的。

定义EDIT

这一部分定义和解释了文件系统API中使用的术语.

blob
代表二进制大对象。一个blob是存储在单一对象中的一组二进制数据。这是在网络应用中引用二进制数据的通用方法。一个blob可以是一个图片或音频文件。
Blob
Blob(以大写B开头的)是一个不可变的数据结构,这意味着一个blob引用的二进制数据不能被直接修改。这使得当Blobs传入到异步API时它们的行为将是可预见的。
persistent storage | 固定存储
固定存储是一种在浏览器中长期存在的的存储,除非用户永久删除它或应用删除它。
temporary storage | 临时存储
临时存储是任何网络应用都拥有的。它是自动而不需要请求的,但浏览器可以没有任何警告地删除这些存储。
时间: 2024-10-02 20:05:47

文件系统API的基本概念的相关文章

HTML5文件系统API和资料整理

来着火狐开发网络的官方文档:点我打开 : W3C的官方文档: 点我打开 : 园友的博客:  点我打开: 浏览器兼容性, 好了就chrome支持, 我刚刚更新的火狐37也不支持, nice, 太nice了: 如果我们在http://localhost/下使用文件系统api创建了虚拟文件, 那么通过一下地址可以访问文件系统:filesystem:http://localhos1/persistent/ ; 如果没有文件系统没有本地文件, 那么应该是一个错误界面: 就chrome支持本地文件系统, 所

HTML5之本地文件系统API - File System API

HTML5之本地文件系统API - File System API 2014-06-03 17:54 19991人阅读 评论(0) 收藏 举报 目录(?)[+] 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到的,还有比较新的特性 - File System API,它能够帮助我们来突破沙箱访问我们本地的文件系统,从而有效的弥补桌面和web应用之间的鸿沟.在今天这篇文章中,我们将会介绍基本的File system

Linux 文件系统相关的基本概念

本文介绍 Linux 文件系统相关的基本概念. 硬盘的物理组成 盘片硬盘其实是由单个或多个圆形的盘片组成的,按照盘片能够容纳的数据量,分为单盘(一个硬盘里面只有一个盘片)或多盘(一个硬盘里面有多个盘片)的硬盘.下面是一张盘片的示意图(此图来自互联网): 磁道和柱面硬盘中有磁头在盘片上读写数据,磁头固定在机械臂上,机械臂上有多个磁头(每个盘片的两侧各一个).当磁头固定不动时(假设机械手臂不动),盘片转一圈所画出来的圆就是磁道(track).所有盘片上相同半径的那个磁道就组成了柱面(cylinder

Linux学习之CentOS(三)--初识linux的文件系统以及用户组等概念

进入到了Linux学习之CentOS第三篇了,这篇文章主要记录下对linux文件系统的初步认识,以及用户组.用户权限.文件所有者.文件所在组等概念 一.Linux文件结构及基本文件夹 文件系统是Linux系统中最基础的一环,但是又是学习Linux系统必学的.因为目前只是刚入门学Linux系统,还不能总结出Linux文件系统的精华部分,所以只是对Linux系统的文件系统做知识的初步整理. 虽然Linux系统有很多种类,但是对于文件系统分区这块,基本上各个版本的Linux系统都是一样的.Linux文

Java 2D API - 1. 基本概念

Java 2D API扩展AWT包,对二维图形.文本及成像功能提供了支持,可用于开发复杂的界面.绘图软件和图像编辑器.Java 2D对象位于用户坐标空间(User coordinate space),当对象呈现在屏幕或打印机,用户空间坐标转换为设备空间坐标(device space coordinate).下面两个类对 Java 2D API十分重要: Graphics Graphics2D Java 2D API提供了如下功能: 为显示设备和打印机等提供了统一的渲染模型: 提供了大量的几何图元

(转)libvirt API的基本概念

本文摘自:http://blog.sina.com.cn/s/blog_da4487c40102v31i.html libvirt对象 libvirt的对象向外展现了虚拟化环境的所有资源.libvirt API编程操纵的第一个对象总是virConnectPtr,它提供了到一个Hypervisor的连接.任何一个libvirt应用程序,都是从调用 virConnectOpen函数开始的,该函数的参数包含一个Hypervisor的URI,函数执行成功表示已连接到指定的Hypervisor,并返回一个

【翻译】Flink Table Api & SQL —Streaming 概念 ——时间属性

本文翻译自官网: Time Attributes   https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/time_attributes.html Flink能够根据不同的时间概念处理流数据. Process time 是指正在执行相应操作的机器的系统时间(也称为“挂钟时间”). Event time 是指基于附在每行上的时间戳对流数据进行处理.时间戳可以在事件发生时进行编码. Inges

C++轻量级跨平台文件系统API

http://en.cppreference.com/w/cpp/experimental/fs https://www.starmessagesoftware.com/cpcclibrary https://github.com/emcrisostomo/fswatch https://github.com/cginternals/cppfs https://pocoproject.org/docs/ https://github.com/SuperV1234/SSVUtils http://

文件系统API

1.fs.Stats 类 fs.Stats类的实例是记录一个文件的基本信息,该实例可以由fs.stat(path,callback).fs.lstat(path,callback)和fs.fstat(fd,callback)获取 fd是文件描述符,可以通过fs.open来获取. 2.buffer类 buffer也有长度,看代码: var str = "5oiiiiiiii"; //<Buffer 35 6f 69 69 69 69 69 69 69 69> console.