2013-09-03 3 views

ответ

18

Я нашел ответ here:

var binary = ""; 
var bytes = new Uint8Array(buffer); 
var length = bytes.byteLength; 
for (var i = 0; i < length; i++) { 
    binary += String.fromCharCode(bytes[i]); 
} 
+1

Спасибо, Дэвид. Я попытался ввести его в код и получил ошибку: 'ReferenceError: UInt8Array не определен'. Через мгновение я понял, что тип встречается интуитивно с именем 'Uint8Array' вместо' UInt8Array' - обратите внимание на нижний регистр «i». Плохой разработчик! Так грустно! – Suncat2000

2

От ответа Дэвида Джонса, я написал этот метод. Попытка/задвижка обрабатывает исключение readAsBinaryString в IE10/11, и называют себя "режим IE":

function readBinaryStringFromBlob(blob, callback, ie) { 
    var reader = new FileReader(); 
    if(!ie) { 
     reader.addEventListener("loadend", function() { 
      callback(reader.result); 
     }); 
     try { 
      reader.readAsBinaryString(blob); 
     } catch (err) { 
      readBinaryStringFromBlob(blob, callback, true); 
     } 
    } else { 
     reader.addEventListener("loadend", function() { 
      var binary = ""; 
      var bytes = new Uint8Array(reader.result); 
      var length = bytes.byteLength; 
      for (var i = 0; i < length; i++) { 
       binary += String.fromCharCode(bytes[i]); 
      } 
      callback(binary); 
     }); 
     reader.readAsArrayBuffer(blob); 
    } 
} 
+0

Это отлично сработало для меня. благодаря – Cerebres

0

Попробуйте мой код:

function readAsBinaryString(blob, callback) { 
     var reader = new FileReader(); 

     var binStringCallback = function (e) { 
      callback(e.target.result); 
     }; 

     var arrBufferCallback = function (e) { 
      var binary = ""; 
      var bytes = new Uint8Array(e.target.result); 
      var length = bytes.byteLength; 
      for (var i = 0; i < length; i++) { 
       binary += String.fromCharCode(bytes[i]); 
      } 
      callback(binary); 
     }; 

     reader.onerror = reader.onabort = function() { 
      callback(null) 
     }; 

     if (typeof reader.readAsBinaryString != "undefined") { 
      reader.onload = binStringCallback; 
      reader.readAsBinaryString(blob); 
     } else { 
      reader.onload = arrBufferCallback; 
      reader.readAsArrayBuffer(blob); 
     } 
    } 
1

Если вы хотите что-то немного terser и ES2015 -ier, то это может быть то, что вы после:

const reader = new FileReader(); 
    reader.onerror = e => alert("File cannot be opened"); 

    if (reader.readAsBinaryString) { 
    reader.onload = e => alert(e.target.result)); 
    reader.readAsBinaryString(file); 
    } 
    else { 
    // Catering for IE 10/11 
    reader.onload = e => { 
     const bytes = new Uint8Array(e.target.result); 
     const binary = bytes.reduce((acc, byte) => acc + String.fromCharCode(byte), ""); 
     alert(binary); 
    }; 
    reader.readAsArrayBuffer(file); 
    } 
Смежные вопросы