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); } }

相關文章
相關標籤/搜索