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