HTML 5中的文件处理之File Writer API

开发 前端
这里是介绍HTML5文件处理的第二部分,之前已经介绍过了基础的FileAPI,接下来是如何通过JS创造文件的部分。我们称之为FileWriterAPI。

这里是介绍HTML5文件处理的第二部分,之前已经介绍过了基础的FileAPI,接下来是如何通过JS创造文件的部分。我们称之为FileWriterAPI

需要提前解释的是,FileWriterAPI不是一个可以“独立”存在的规范,它强烈的依赖于FileAPI和即将介绍的FileSystemAPI。FileAPI是最基础的接口这毋庸置疑,而之所以先于FileSystemAPI介绍FileWriterAPI,是因为FileSystemAPI是一套更庞大的接口设计集合,FileWriterAPI相比之下相对简单,可以算作是FileSystemAPI也用得到的一部分基础,提前介绍给大家。

总览

这部分一共有三大接口:

* BlobBuilder接口:创建Blob

* FileSaver接口:提供一些列方法和事件监听方式,代表一个保存文件的过程

* FileWriter接口:是从FileSaver扩展来的,提供更丰富的输出选择

需要注意的是,FileSaver和FileWriter是不能通过接口指定要保存或要写入的文件的,它们都是对象创建时就已经确定的并且不可更改。同时FileSaver更是不提供控制写入什么内容的接口,要写入的内容也是对象创建时就已经确定的并且不可更改的;而FileWriter可以通过接口控制要写入的内容。

接口描述

同样的,这3个接口其实并不复杂,也很好理解(同样的,接口中的“#Foo”表示任意Foo类型的对象):

BlobBuilder接口

  1. #BlobBuilder.getBlob([contentType]) // 返回目前已放入的所有Blob数据构成的对象  
  2. #BlobBuilder.append(text[, contentType]) // 放入文本数据  
  3. #BlobBuilder.append(data) // 放入数据(Blob或ArrayBugger) 

FileSaver接口

  1. #FileSaver.abort() // 中断保存操作  
  2. #FileSaver.readyState // 保存工作的状态(DONE、INIT、WRITING)  
  3. #FileSaver.error // 最后一次出错的错误信息  
  4. #FileSaver.onwritestart // 写入操作开始时触发  
  5. #FileSaver.onwrite // 写入操作成功时触发  
  6. #FileSaver.onwriteend // 写入操作完成时触发(不管成功还是失败)  
  7. #FileSaver.onprogress // 写入操作过程中触发  
  8. #FileSaver.onabort // 写入操作被中断时触发  
  9. #FileSaver.onerror // 写入操作失败时触发 

FileWriter接口

  1. #FileWriter.position // 当前写入操作所处的位置  
  2. #FileWriter.length // 文件长度(或在无权读取文件信息的情况下返回已写入的长度)  
  3. #FileWriter.write(blob) // 在position处写入blob数据  
  4. #FileWriter.seek(offset) // 设置position属性为offset  
  5. #FileWriter.truncate(size) // 在size处截断文件  
  6. #FileWriter.abort() // 继承自FileSaver  
  7. #FileWriter.readyState // 继承自FileSaver  
  8. #FileWriter.error // 继承自FileSaver  
  9. #FileWriter.onwritestart // 继承自FileSaver  
  10. #FileWriter.onwrite // 继承自FileSaver  
  11. #FileWriter.onwriteend // 继承自FileSaver  
  12. #FileWriter.onprogress // 继承自FileSaver  
  13. #FileWriter.onabort // 继承自FileSaver  
  14. #FileWriter.onerror // 继承自FileSaver 

代码示例

举例一:创建Blob对象

  1. var blobBuilder = new BlobBuilder(); // 创建BlobBuilder对象  
  2. blobBuilder.append("我今天只说三句话;"); // 连续放入文本  
  3. blobBuilder.append("包括这一句;");  
  4. blobBuilder.append("我的话完了。");  
  5.  
  6. var url = window.URL.createObjectURL(blobBuilder.getBlob()); // 返回Blob对象并以此创建URL  
  7. window.open(url); // 通过URL打开这个Blob对象 

举例二:使用FileWriter

  1. fileEntry.createWriter(function (fileWriter) {  
  2.     fileWriter.write(blobBuilder.getBlob()); // 返回Blob对象并通过fileWriter写入  
  3.     fileWriter.onwriteend = function () {...}; // 绑定写入操作完成后的事件  
  4. }); 

这里需要注意的是:

1.在不同的浏览器下,BlobBuilder和window.URL依然存在着不同的前缀,比如webkit下的接口分别为WebKitBlobBuilder和webkitURL;

2.这里出现了一个陌生的对象fileEntry和陌生的方法createWriter,这正是接下来要介绍的一套比较复杂的API:FileSystemAPI的一部分内容。想弄清楚fileWriter具体运行的环境,还得继续学习,不过抛开外部环境的形成过程,fileWriter的用法应该可以体会到了;

3.FileSaver还没有用得到的地方,毕竟标准还没有最终形成,也许他将来某一天,借助其它规范的优势,摇身一变,就用在“另存为对话框”之类的地方了。

以上就是对FileWriterAPI的介绍,紧接着就是FileSystemAPI了,届时HTML5所有文件操作的神秘面纱都会被揭开。

原文:http://bulaoge.net/topic.blg?dmn=g3g4&tid=2356045

【编辑推荐】

  1. HTML 5中的文件处理之FileAPI
  2. 浅析IndexedDB存数结构
  3. IndexedDB的JS接口设计详解
  4. 调试IndexedDB应用程序
  5. 基于Firefox 10的IndexedDB实例演示
责任编辑:陈贻新 来源: 赵锦江的博客
相关推荐

2012-02-23 10:32:19

HTML 5

2010-09-03 08:58:01

HTML 5

2012-01-04 09:42:40

HTML 5

2011-07-14 09:16:10

HTML 5

2010-01-29 09:00:48

HTML5 File 文件拖放上传

2012-11-05 10:34:52

IBMdw

2015-10-27 10:22:47

Html5API调用

2023-10-07 09:08:32

Golangbufio

2013-01-04 13:39:51

2013-01-18 10:59:44

IBMdW

2012-06-04 10:16:18

HTML5

2011-08-29 10:49:22

2011-05-13 17:36:05

HTML

2014-08-28 10:16:17

HTML5

2017-08-09 15:57:11

JavaScriptHtml5音频

2011-04-11 10:14:47

HTML 5

2011-11-23 09:11:36

API

2011-12-21 21:56:45

PhoneGap APFile

2013-06-27 14:33:00

2009-08-31 14:01:50

C#创建一个文件
点赞
收藏

51CTO技术栈公众号