`

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

    博客分类:
  • HTML
阅读更多

日期:2012-4-12  来源:GBin1.com

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

新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等。除了上面我们提到的,还有比较新的特性 - File System API ,它能够帮助我们来突破沙箱访问我们本地的文件系统,从而有效的弥补桌面和web应用之间的鸿沟。在今天这篇文章中,我们将会介绍基本的File system API的知识,探索HTML5的本地文件系统API的新特性,希望大家能够喜欢!

介绍

“我们不再需要下载并且安装软件。一个简单的web浏览器和一个可供使用的互联网就足以让我们在任何时间,任何地点,还有任何平台上使用任何web应用程序。”

简 单来说,web应用很酷,但是相对于桌面应用来说,它们有比较显著的弱点:它们无法在一个有层次的文件夹结构体即文件系统中互动和组织。 幸运的是,如果我们使用Filesystem API,我们可以做到。这个API帮助我们控制私有的本地文件系统“沙箱(sandbox)",在这里我们可以读和写文件,创建和排列文件夹。虽然在我们 写这篇文章的时候,只有Google的Chrome完整的支持Filesystem API,我觉得我们还是有必要学习这个强大并且方便的本地存储特性。

本地文件系统API包含了俩个不同的版本。异步API,对于一般的应用来说非常有用。同步API,特别为web设计。这篇文章中,我们将介绍异步版本的API。

步骤一:开始

首先我们需要通过请求一个LocalFile对象来得到HTML5文件系统的访问,使用window.requetFileSystem全局方法:

window.requestFileSystem(type, size, successCallback, opt_errorCallback)

前俩个参数,你指定需要的生命周期类型和文件系统的大小。一个持久性的(Persistent) 文件系统非常适合长期保存用户数据。浏览器不会删除,除非用户特意要求。一个临时性(Temporary) 的文件系统非常适合web应用来缓存数据,但是在浏览器删除文件系统后任然可以操作。size用来指定字节大小,一般指定有效的最大访问存储大小。

第 三个参数是一个回调函数(callback),当用户代理成功的提供了一个文件系统后触发。它的主要参数是一个FileSystem对象。并且我们可以添 加一个可选的callback函数,用来在出错的时候调用,或者请求被拒绝的时候。参数是一个FileError对象。虽然这个对象是可选的,最好还是捕 捉这些错误,因为很多地方可能会出错。

文件系统得到这些方法依赖于最初包含的document。所有的document或者web应用来自 于同一个最初来源共享一个文件系统。两个document或者应用来自于不同的来源完全不同并且不可联系。一个文件系统严格被限制访问一个应用,不能访问 另外一个应用保存的数据。同时也对于其它的文件独立。这是一件好事:让文件访问不相干的系统文件资源,例如,操作系统的文件,完全没有必要,也不安全。

我们看看这个例子:

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, initFS, errorHandler);
function initFS(fs){
  alert("Welcome to Filesystem! It's showtime :)"); // Just to check if everything is OK :)
  // place the functions you will learn bellow here
}
function errorHandler(){
  console.log('An error occured');
} 

这 里我们创建而来一个临时的5M文件系统存储。提供了一个成功的callback函数,用阿里操作我们的文件系统。并且添加了一个错误处理,用来处理错误。 这里errorhandler()方法非常具有一般性。 如果你想的话,你可以创建一个优化版本,显示给用户更加详细的error信息。

function errorHandler(err){
 var msg = 'An error occured: ';

  switch (err.code) {
    case FileError.NOT_FOUND_ERR:
      msg += 'File or directory not found';
      break;

    case FileError.NOT_READABLE_ERR:
      msg += 'File or directory not readable';
      break;

    case FileError.PATH_EXISTS_ERR:
      msg += 'File or directory already exists';
      break;

    case FileError.TYPE_MISMATCH_ERR:
      msg += 'Invalid filetype';
      break;

    default:
      msg += 'Unknown Error';
      break;
  };

 console.log(msg);
};

这 个你得到的文件对象拥有一个name(一个唯一的文件系统名称,由浏览器赋值)并且ROOT属性参考文件系统的ROOT目录。这是一个 DirectoryEntry对象,可以嵌套使用。每一个文件目录都可以包含文件,由FileEntry对象标示。DirectoryEntry对象定义 使用路径名称得到DirectoryEntry和FileEntry的方法(如果不存在路径名,会创建新的目录)。DirectoryEntry同时定义 了createReader()工厂方法用来返回一个DirectoryReader对象用来列出一个文件夹。FileEntry类定义了一个得到 File对象的方。你可以使用FileReader对象来读取文件。FileEntry定义了另外一个方法用来返回一个FileWriter对象,你可以 将内容写到文件中。

听起来是不是有点儿复杂?通过下面的例子我们会更清楚的理解。

步骤二:处理文件夹

很显然,第一件我们需要做的事就是创建一些目录。虽然ROOT目录已经村存在,你不希望把所有的文件都保存在那里。文件夹使用DirectoryEntry对象来创建。在下面的例子中我们将在ROOT文件夹中创建一个文件夹:Documents

fs.root.getDirectory('Documents', {create: true}, function(dirEntry) {
  alert('You have just created the ' + dirEntry.name + ' directory.');
}, errorHandler); 

getDiretory()方法用来读和创建目录。作为第一个参数,你可以传递一个名字或者路径来寻找或者创建。我们设计第二个参数为true,因为我们需要创建一个目录 - 不是读一个已存在的目录。当然我们在最后添加了一个错误的callback方法。

...

...

原文来自:探索HTML5之本地文件系统API - File System API

分享到:
评论

相关推荐

    vscode-native-file-system:将本地文件系统API支持添加到Visual Studio Code

    本机文件系统自述文件 这是扩展名“ native-file-system”的自述文件。 写下简短描述后,我们建议包括以下各节。 特征 描述扩展程序的特定功能,包括扩展程序的屏幕截图。 图像路径是相对于此README文件的。 例如,...

    jaxb-api-2.1.jar

    在使用webservice,esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded...执行System.out.println(System.getProperty("java.endorsed.dirs"));输出jaxb-api-2.1.jar应该放的目录。下载附件放到目录下即可。

    native-file-system-adapter:文件系统,基于规范参考实现

    本机文件系统适配器(ponyfill) 这是一个浏览器内文件系统,它遵循并支持从各种后端存储和检索文件。 转接器 该polyfill / ponyfill附带5个文件系统后端: native :将文件存储在本Native Sandboxed文件存储中 ...

    测试文件系统压力file-system-stress-testing.zip

    file-system-stress-testing 是一款能够进行 POSIX 文件系统压力测试的工具。 分享 window._bd_share_config = { "common": { "bdSnsKey": {},...

    API-MS-WIN-CORE-LIBRARYLOADER-L1-2-1.zip

    windows加载linux的依赖dll文件 1.放在依赖程序同目录下 ...Copy the .DLL file to your C:\Windows\System32\ folder. (32 bit) Copy the .DLL file to your C:\Windows\SysWOW64\ folder. (64 bit)

    gatsby-starter-file-system-route-api-mdx

    带有Chakra UI的Gatsby入门文件系统路由API 基于模板。 :rocket: 快速开始 使用Gatsby CLI创建一个新站点,并指定入门模板。 # create a new project gatsby new gatsby-starter-chakra-ui ...

    DataCleaner-api-4.5.2.zip

    memoryfilesystem.zip,jsr-203文件系统的内存实现jsr-203文件系统的内存实现

    api-docs:开放API格式的Bokun API文档(以前是大张旗鼓)

    api-docs Bokun API的文档,采用Open API格式(以前是大张旗鼓)。安装swagger命令行界面swagger-cli可以验证yaml文件swagger validate [file] 。 并将它们捆绑为自包含的json文件,以与Swagger代码生成器结合使用,...

    VBA API 32 Serialport MT-SICS

    Private Const SETDTR = 5 Private Const SETRTS = 3 '------------------------------------------------------------------------------- ' System Structures '-----------------------------------------------...

    file-system:加强文件系统能力

    文件系统-简化的文件系统 该模块使文件操作API变得简单,因此您无需担心目录(dir)是否退出。 此外,api与节点的文件系统相同。 此插件没有现有的时间成本。 var fs = require ( 'file-system' ) ; fs . mkdir ( ...

    API之网络函数---整理网络函数及功能

    5. API之文本和字体函数 AddFontResource 在Windows系统中添加一种字体资源 CreateFont 用指定的属性创建一种逻辑字体 CreateFontIndirect 用指定的属性创建一种逻辑字体 CreateScalableFontResource 为一种...

    The Extended FAT file system(exfatfs api)

    微软的Extended FAT file system的系统API,用于PC端

    swift_upload_file_batch.sh

    最近在项目中遇到了一个需求,在云计算项目交付中,需要把按照文件夹分类的若干原始文件自动压缩打包上传到swift对象存储中,需要获取到不同文件夹分别对应不同的类别、文件名称、文件描述等等信息,几十个G的文件...

    百度文件系统 BFS-Baidu.zip

    The Baidu File System 百度的核心数据库Tera将数据持久化在分布式文件系统上,...bfs_mount通过libfuse,将bfs挂载到本地,作为本地文件系统访问;bfs_client是一个二进制的管理工具。 标签:百度

    browser-fs-access:在浏览器中具有旧版后备的文件系统访问API

    npm install --save browser-fs-access使用范例该模块功能检测对文件系统访问API的支持,并且仅加载实际相关的代码。 // The imported methods will use the File System// Access API or a fallback ...

    file-system-access:公开用户设备上的文件系统,以便Web应用程序可以与用户的本机应用程序进行互操作

    文件系统访问API 在和查看建议。 有关在API表面进行的更改列表,请参阅 ,该列表介于从Chrome 83到Chrome 85的原始试用版和从Chrome 86发行的版本之间。问题如今,如果网站想要创建涉及本地文件(文档编辑器,图像...

    cpuz 1.0 完美版

    CPU-Z 自读文件 ------------------ Version 1.56 版本号 1.56 October 2010 2010年10月 Contact : cpuz@cpuid.com 联系我们 :cpuz@cpuid.com Web page: http://www.cpuid.com/cpuz.php 网站:...

    api中文版32位的windowsAPI

    FILE_ATTRIBUTE_SYSTEM 文件为系统文件 FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作 FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作 FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入...

    JIL widget system API specfication(Handset API)1.1 JIL Widget 系统API(终端侧API)1.1规范

    1 Preface ................................5  1.1. About this Document ...............5  1.2. Who this document is for...........5  1.3. Readers Comments ..................5  1.4. Related Documents...

    HAPI-Sample-ChromeOS:示例ChromeOS应用演示了HAPI API的使用

    HAPI样本ChromeOS 示例ChromeOS应用演示了HAPI API的使用Chrome操作系统应用程序使用HAPI提供了示例Chrome操作系统文件系统提供程序API应用程序。 该应用程序允许Active Directory(AD)身份验证,并作为Chrome OS的...

Global site tag (gtag.js) - Google Analytics