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[]”
你能解释一下吗?