Skip to content

readAsArrayBuffer returns Uint8Array instead of ArrayBuffer #2

@skratchdot

Description

@skratchdot

I have some browser code that does:

const reader = FileReader();
reader.addEventListener('load', (e) => {
  const arrayBuffer = e.target.result;
  const view = new DataView(arrayBuffer);
  // do some stuff with the view
});
reader.readAsArrayBuffer(file);

When I run my mocha tests in node (making node stubs using the node file-api package), I see the following error: TypeError: First argument to DataView constructor must be an ArrayBuffer

The fix for this is simple, but I don't know the ramifications for other people that use this library, so I don't know if you want me to submit a pull request or not. Anyways, the following 3 lines:

FileReader/FileReader.js

Lines 42 to 44 in 805a7b0

case 'buffer':
return data;
break;

Can be changed to:

case 'buffer':
  return toArrayBuffer(data);
  break;

And the following function needs to be included:

toArrayBuffer(buffer) {
  const ab = new ArrayBuffer(buffer.length);
  const view = new Uint8Array(ab);
  for (let i = 0; i < buffer.length; ++i) {
    view[i] = buffer[i];
  }
  return ab;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions