【问题标题】:Howto convert file to byte stream in javascript如何在javascript中将文件转换为字节流
【发布时间】:2019-05-28 08:38:24
【问题描述】:

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

下面的另一种方式

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

文件需要转换成字节流

【问题讨论】:

  • 您是否使用图像?请提供您已经尝试过的代码
  • 试试这个 let byteArray = new Uint8Array(file)

标签: javascript


【解决方案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 的结果对您不起作用,您可能需要使用new Uint8Array 将其转换为真正的byte[]。这是上述代码的扩展版本:

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
}

这里是用 promise 包裹起来的实现:

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

附: 如果由于某种原因不能引用ev.target,请尝试使用fileReader.result

【讨论】:

  • 这一行显示错误。常量结果 = ev.target.result;结果不是目标的属性
  • 它应该像 event.target 文档中记录的那样工作 developer.mozilla.org/en-US/docs/Web/API/FileReader/onload
  • @SSSS 查看我的更新答案。尝试使用 fileReader.result
  • @SSSS,那么fileReader.result 是否解决了问题?附言如果此答案解决了您的任务,请将其标记为已接受。谢谢。
  • 是的。确定我现在做。最后一件事那么我怎样才能将这个字节数组转换为字符串??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多