Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将输入=文件转换为字节数组_Javascript_Filereader - Fatal编程技术网

Javascript 将输入=文件转换为字节数组

Javascript 将输入=文件转换为字节数组,javascript,filereader,Javascript,Filereader,我尝试将通过输入文件获取的文件转换为字节[]。 我尝试使用文件阅读器,但肯定错过了一些东西: var bytes = []; var reader = new FileReader(); reader.onload = function () { bytes = reader.result; }; reader.readAsArrayBuffer(myFile); 但最终,my bytes var不包含字节数组 我看了这篇文章:但它不是以字节[]结尾的,readAsBinaryStrin

我尝试将通过输入文件获取的文件转换为字节[]。 我尝试使用文件阅读器,但肯定错过了一些东西:

var bytes = [];
var reader = new FileReader();
reader.onload = function () {
   bytes = reader.result;
};
reader.readAsArrayBuffer(myFile);
但最终,my bytes var不包含字节数组

我看了这篇文章:但它不是以字节[]结尾的,readAsBinaryString()不受欢迎


我错过了什么?

面临着一个类似的问题,“reader.result”并没有以“byte[]”结尾。所以我将其转换为Uint8Array对象。这也不是一个完美的“byte[]”,所以我不得不从中创建一个“byte[]”。这是我解决这个问题的方法,它对我很有效

var reader = new FileReader();
var fileByteArray = [];
reader.readAsArrayBuffer(myFile);
reader.onloadend = function (evt) {
    if (evt.target.readyState == FileReader.DONE) {
       var arrayBuffer = evt.target.result,
           array = new Uint8Array(arrayBuffer);
       for (var i = 0; i < array.length; i++) {
           fileByteArray.push(array[i]);
        }
    }
}
var reader=newfilereader();
var fileByteArray=[];
reader.readAsArrayBuffer(myFile);
reader.onloadend=函数(evt){
if(evt.target.readyState==FileReader.DONE){
var arrayBuffer=evt.target.result,
阵列=新的UINT8阵列(arrayBuffer);
对于(var i=0;i

“fileByteArray”是您需要的。看到这些评论,你似乎也这么做了,仍然想分享这个方法。

在我看来,你只是想把文件放到一个数组中?这些函数怎么样?一个可以作为文本读取,另一个可以作为base64字节字符串读取,如果您真的需要
readAsArrayBuffer
数组缓冲区输出,我还包括:

document.getElementById(“myBtn”).addEventListener(“单击”,函数(){
上传文件3();
}); 
var fileByteArray=[];
函数uploadFile1(){
var files=myInput.files[0];
var reader=new FileReader();
reader.onload=processFile(文件);
reader.readAsText(文件);
}
函数uploadFile2(){
var files=document.querySelector('input')。文件[0];
var reader=new FileReader();
reader.onload=processFile(文件);
reader.readAsDataURL(文件);
}
函数uploadFile3(){
var files=myInput.files[0];
var reader=new FileReader();
reader.onload=processFile(文件);
reader.readAsArrayBuffer(文件);
}
函数processFile(文件){
返回函数(e){
var theBytes=e.target.result;//.split('base64')[1];//与uploadFile2一起使用
fileByteArray.push(字节);
document.getElementById('file')。innerText='';

对于(var i=0;i,这里是一个经过修改的、我认为更容易接受的答案版本。此函数返回一个值为字节[]的值

function fileToByteArray(file) {
    return new Promise((resolve, reject) => {
        try {
            let reader = new FileReader();
            let fileByteArray = [];
            reader.readAsArrayBuffer(file);
            reader.onloadend = (evt) => {
                if (evt.target.readyState == FileReader.DONE) {
                    let arrayBuffer = evt.target.result,
                        array = new Uint8Array(arrayBuffer);
                    for (byte of array) {
                        fileByteArray.push(byte);
                    }
                }
                resolve(fileByteArray);
            }
        }
        catch (e) {
            reject(e);
        } 
    })
}
通过这种方式,您可以简单地在异步函数中调用此函数,如下所示

async function getByteArray() {
    //Get file from your input element
    let myFile = document.getElementById('myFileInput').files[0];

    //Wait for the file to be converted to a byteArray
    let byteArray = await fileToByteArray(myFile);

    //Do something with the byteArray
    console.log(byteArray);
}

我看到了这个,但它不是以byte[]结尾是的。字符串是一个char数组,当char是bytes时,字符串是一个bytes数组也是readAsBinaryString()已弃用,我不能再使用它了最接近字节数组的是Uint8Array,它恰好将arraybuffer作为其构造函数的参数。是的,我最后就是这么做的,thx:)请花点时间正确缩进代码。在左侧有10、15个空列是没有意义的!
这也不是一个完美的“byte[]”
你能解释一下吗?