web-dev-qa-db-ja.com

input = fileをバイト配列に変換

入力ファイルから取得したファイルをbyte []に​​変換しようとしています。私はFileReaderで試しましたが、何かを見逃してしまいます:

var bytes = [];
var reader = new FileReader();
reader.onload = function () {
   bytes = reader.result;
};
reader.readAsArrayBuffer(myFile);

しかし、結局のところ、私のbytes varにはバイト配列が含まれていません。

私はこの投稿を見ました: 入力タイプ=ファイルを介してバイト配列を取得しています ですが、byte []で終わっておらず、readAsBinaryString()は非推奨です

私は何を見逃していますか?

5
Lempkin

ファイルを配列に入れたいだけだと思いますか?これらの関数はどうですか-1つはテキストとして、もう1つはbase64バイト文字列として読み取ることができます。readAsArrayBuffer配列バッファー出力が本当に必要な場合は、それも含めました。

document.getElementById("myBtn").addEventListener("click", function() {
  uploadFile3();
}); 

var fileByteArray = [];

function uploadFile1(){
  var files = myInput.files[0];
  var reader = new FileReader();
  reader.onload = processFile(files);
  reader.readAsText(files); 
}

function uploadFile2(){
  var files = document.querySelector('input').files[0];
  var reader = new FileReader();
  reader.onload = processFile(files);
  reader.readAsDataURL(files); 
}

function uploadFile3(){
  var files = myInput.files[0];
  var reader = new FileReader();
  reader.onload = processFile(files);
  reader.readAsArrayBuffer(files); 
}

function processFile(theFile){
  return function(e) { 
    var theBytes = e.target.result; //.split('base64,')[1]; // use with uploadFile2
    fileByteArray.Push(theBytes);
    document.getElementById('file').innerText = '';
    for (var i=0; i<fileByteArray.length; i++) {
        document.getElementById('file').innerText += fileByteArray[i];
    }
  }
}
<input id="myInput" type="file">    
<button id="myBtn">Try it</button>
<span id="file"></span>
2
vapcguy