Web API接口之FileReaderjavascript
在給網站編寫 JavaScript 代碼時,也有不少可用的 API。 WEB API 參考。html
使用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是數組對象
其中1是終止讀取操做,2~4是將數據讀取爲不一樣的格式。canvas
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); } }