2013-09-03 10 views

Antwort

18

ich die Antwort gefunden 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

Vielen Dank, David. Ich habe versucht, diesen Code einzugeben und bekam einen Fehler, 'ReferenceError: UInt8Array ist nicht definiert'. Nach einer Weile wurde mir klar, dass der Typ "Uint8Array" statt "UInt8Array" kontraintuitiv heißt - beachte das Kleinbuchstabe "i". Schlechter Entwickler! So traurig! – Suncat2000

2

Aus der Antwort des David Jones, schrieb ich diese Methode. Die try/catch behandelt die readAsBinaryString Ausnahme in IE10/11 und nennen sich die "IE-Modus":

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

Das hat perfekt für mich funktioniert. Vielen Dank – Cerebres

0

meinen Code Versuchen:

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

Wenn Sie etwas ein wenig knappere und ES2015 möchten -Ist das könnte dann sein, was Sie wollen:

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