Web API接口之FileReader

 

Web API接口之FileReaderjavascript

0、导言

在给网站编写 JavaScript 代码时,也有不少可用的 API。 WEB API 参考html

一、FileReader

使用FileReader对象,web应用程序能够异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容。兼容IE10+,FF和Chrome。Safari和Opera不支持。java

二、如何读取文件?

var readFile = function(file, callback) {
  var fileReader = new FileReader(); //实例化FileReader
  fileReader.onloadend = function() { //加载完成后执行
    var result = null; 
    if (fileReader.readyState === FileReader.DONE) { //判断操做是否完成
      result = fileReader.result; //获取结果
    }
    if (callback) {
      callback(result);
    }
  };
  fileReader.readAsBinaryString(file); //以二进制的方式读取文件
};

调用的话,就能够经过以下代码调用git

readFile(file, function(result){
  // do something
});

其中file既能够是blob对象也能够是一个File对象。通常咱们经常使用的是File对象,如何来获取一个简单的File对象呢?github

<input type="file" id="file_input">

JS:web

var fileEl = document.getElementById('#file_input');
var file = fileEl.files[0]; //files是数组对象

三、FileReader API

方法

  1. void abort();
  2. void readAsArrayBuffer(in Blob blob);
  3. void readAsBinaryString(in Blob blob);
  4. void readAsDataURL(in Blob blob);
  5. void readAsText(in Blob blob, [optional] in DOMString encoding);

其中1是终止读取操做,2~4是将数据读取为不一样的格式。canvas

状态常量

  1. EMPTY 尚未加载任何数据
  2. LOADING 数据正在被加载
  3. DONE 已完成所有的读取请求

属性(属性所有都是只读的)

  1. error 读取文件时发生的错误
  2. readyState FileReader对象的当前状态
  3. result 读取到的文件内容

四、用途

  1. 客户端校验文件内容
  2. 预览图片
  3. 客户端导出

五、参考文档

  1. MDN - Blob
  2. MDN - FileReader

六、后续补充

2016-2-17日追加

FileReader的API方法readAsBinaryString在IE11中没法使用,为了兼容IE11,咱们须要使用另外的API或者使用猴子补丁的方式实现该API。数组

参考http://stackoverflow.com/questions/31391207/javascript-readasbinarystring-function-on-e11ruby

补丁代码以下:markdown

javascript if(!FileReader.prototype.readAsBinaryString){ FileReader.prototype.readAsBinaryString = function (blob) { var binary = ''; var self = this; var reader = new FileReader(); reader.onload = function(e){ var bytes = new Uint8Array(reader.result); var length = bytes.byteLength; for (var i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); } self.result = binary; $(pt).trigger('onload'); }; reader.readAsArrayBuffer(blob); } }

相关文章
相关标签/搜索