本文主要介绍使用"> HTML5 File API 实现客户端 log 读写,并实现客户端 log 下载功能,帮助用户更方便的收集客户端 log。
在 HTML 5 里,从 Web 网页上访问本地文件系统变的十分的简单,那就是使用 File API。 这个 File 规范说明里提供了一个 API 来表现 Web 应用里的文件对象,您可以通过编程来选择它们,访问它们的信息。File API 有以下几部分 JavaScript 类组成:
读取、操作文件的类:File/Blob, FileList, FileReader 创建、写入文件的类:BlobBuilder, FileWriter 目录、文件系统访问的类:
DirectoryReader, File
Entry/DirectoryEntry,LocalFileSystem
规范里定义了两种类型的 API:异步和同步。一般情况下应该使用异步 API,这样可以防止调用 API 的时候阻塞 UI 进程。同步 API 只可以在 Web Workers 上下文中使用,关于 Web Worker 的资料,可以在文章最后的参考链接中找到。 使用同步版本的 API 不需要指定回调函数,所有的方法将通过返回值返回方法调用的结果。在本文中将主要使用同步 API,原因有以下两点:
需要保证用户调用 HTML5 Log 方法之前,HTML File API 已经初始化完毕 需要保证 log 信息写入的顺序
HTML5 规范可以参考 W3C 官方网站。 HTML5 File API 规范可以参考 W3C 上的 官方网站。 HTML5 File API: Directories and System 规范可以参考 W3C 上的 官方网站。 HTML5 File API: Writer 规范可以参考 W3C 上的官方网站。
File API JavaScript 类接口定义介绍
本文中主要使用了同步版本的 FileEntry、FileWriter 和 DirectoryEntry 类。
清单 1. FileEntrySync 接口定义
[No
InterfaceObject] interface FileEntrySync:EntrySync { FileWriterSync createWriter() raises (FileException);// 创建 FileWriter,用来写内容到文件 File file() raises (FileException);// 返回代表当前 File 状态的实例 };
清单 2. FileWriterSync 接口定义
[NoInterfaceObject] interface FileWriterSync { readonly attribute unsigned long long position;// 下一次要写入内容的位置 readonly attribute unsigned long long length;// 文件的长度 void write (Blob data) raises (FileException);// 写入内容到文件 void seek (long long offset) raises (FileException);// 设置下一次要写入内容的位置 void truncate (unsigned long long size) raises (FileException);// 改变文件长度到指定
大小 };
清单 3. DirectoryEntrySync 接口定义
[NoInterfaceObject] interface DirectoryEntrySync:EntrySync { DirectoryReaderSync createReader () raises (FileException);// 创建 Reader 遍历目录中的文件 // 根据文件路径,得到目录中文件 FileEntrySync getFile (DOMString path, optional Flags options) raises (FileException); // 创建或者
获取子目录 DirectoryEntrySync getDirectory (DOMString path, optional Flags options) raises (FileException); void removeRecursively () raises (FileException);// 删除目录以及这个目录下面的所有内容 };