Web API接口之FileReader


 

Web API接口之FileReader

0、導言

在給網站編寫 JavaScript 代碼時,也有很多可用的 API。 WEB API 參考

1、FileReader

使用FileReader對象,web應用程序可以異步的讀取存儲在用戶計算機上的文件(或者原始數據緩沖)內容。兼容IE10+,FF和Chrome。Safari和Opera不支持。

2、如何讀取文件?

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); //以二進制的方式讀取文件
};

調用的話,就可以通過如下代碼調用

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

其中file既可以是blob對象也可以是一個File對象。一般我們常用的是File對象,如何來獲取一個簡單的File對象呢?

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

JS:

var fileEl = document.getElementById('#file_input');
var file = fileEl.files[0]; //files是數組對象

3、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是將數據讀取為不同的格式。

狀態常量

  1. EMPTY 還沒有加載任何數據
  2. LOADING 數據正在被加載
  3. DONE 已完成全部的讀取請求

屬性(屬性全部都是只讀的)

  1. error 讀取文件時發生的錯誤
  2. readyState FileReader對象的當前狀態
  3. result 讀取到的文件內容

4、用途

  1. 客戶端校驗文件內容
  2. 預覽圖片
  3. 客戶端導出

5、參考文檔

  1. MDN - Blob
  2. MDN - FileReader

6、后續補充

2016-2-17日追加

FileReader的API方法readAsBinaryString在IE11中無法使用,為了兼容IE11,我們需要使用另外的API或者使用猴子補丁的方式實現該API。

參考http://stackoverflow.com/questions/31391207/javascript-readasbinarystring-function-on-e11

補丁代碼如下:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM