reactJS windows.FileReader readAsArrayBuffer方法错误

问题描述 投票:1回答:1

reactJS使用拖放区接收文件并将其替换为字节缓冲区时出错

TypeError:第一个参数必须是字符串,Buffer,ArrayBuffer,Array或类似数组的对象。

  onDrop = async (file) => {
try {     
  console.log(file.name);
  let reader = new window.FileReader();
  reader.readAsArrayBuffer(file); // <<== Error occurred here
  const buffer = await Buffer.from(reader.result);
  console.log(buffer.length);
} catch (error) {
  console.log(error);
}

我该如何解决..请帮助

javascript reactjs io filereader
1个回答
0
投票

您好,您的代码中有几个问题,请结帐:

  • 我如何检索文件:函数自变量(this)指的是调用方法的输入,而不是文件
  • FileReader API 仅支持回调,如果要使用异步/等待,则必须将其包装在自己的方法中(由promise管理)
  • 要知道缓冲区长度,您必须调用ArrayBuffer.byteLength
  • 此外,如果您不使用任何库并且在NODE env之外工作,则Buffer将是未定义的>]
function readFileAsync(file) {
  return new Promise((resolve, reject) => {
    let reader = new FileReader();

    reader.onload = () => {
      resolve(reader.result);
    };

    reader.onerror = reject;

    reader.readAsArrayBuffer(file);
  })
}

const readURL = async (input) => {
  try {
    const file = input.files[0]; // this is where your file data is
    console.log(file.name);
    let contentBuffer = await readFileAsync(file);
    console.log(contentBuffer.byteLength); // Length in ArrayBuffer
  } catch (error) {
    console.log(error);
  }
}
<input type='file' id="upload" onchange="readURL(this)" />
© www.soinside.com 2019 - 2024. All rights reserved.