如何在javascript中将文件转换为字节流

时间:2019-05-28 08:38:24

标签: javascript

如何将文件转换为字节数组。

下一轮回合

let file = new File([myBlob], "name");

文件需要转换为字节流

1 个答案:

答案 0 :(得分:1)

您可能可以尝试使用浏览器中提供的FileReader API。

let file = new File(...) // this could be from file input or other source
let fileReader = new FileReader();

fileReader.readAsArrayBuffer(file);
fileReader.onload = function(ev) {
    const result = ev.target.result;
    console.log(result); // here it is
}

根据this answer,如果readAsArrayBuffer的结果不适用于您,则可能需要使用byte[]将其转换为真实的new Uint8Array。这是上述代码的扩展版本:

let file = new File(...) // this could be from file input or other source
let fileReader = new FileReader();

fileReader.readAsArrayBuffer(file);
fileReader.onload = function(ev) {
    const array = new Uint8Array(ev.target.result);
    const fileByteArray = [];
    for (let i = 0; i < array.length; i++) {
       fileByteArray.push(array[i]);
    }
    console.log(array); // here it is
}

这是实现承诺的包装,以方便使用:

function getByteArray(file) {
   return new Promise(function(resolve, reject) {
       fileReader.readAsArrayBuffer(file);
       fileReader.onload = function(ev) {
           const array = new Uint8Array(ev.target.result);
           const fileByteArray = [];
           for (let i = 0; i < array.length; i++) {
               fileByteArray.push(array[i]);
           }
           resolve(array);  // successful
       }
       fileReader.onerror = reject; // call reject if error
   })
}

//usage
let file = new File(...)
getByteArray(file).then((byteArray) => {
    // do whatever you need
    console.log(byteArray);
})

P.S。 如果由于某种原因您无法参考ev.target,请尝试改用fileReader.result