Skip to content

File-based Blob implementation #45188

Description

@flakey5

What is the problem this feature will solve?

As of now, the Blob class only supports data in memory while the spec allows it to be both memory and file based. This has the possibility to use up a lot of memory when writing a lot of data. An example of this would be in the motivator for this change: undici's multipart/form-data support where it stores the entire response file in memory (https://github.com/nodejs/undici/pull/1606/files#diff-bd6db9a8bceb4e9fce3f93ba5284c81f46a44a1187909e8609006e1efeab2570R427).

What is the feature you are proposing to solve the problem?

Adding support to Blob to work either off of memory or a file.

  • C++ side: keep the current Blob class the same and make a separate class called FileBlob.
    • Implements the exact same api, only difference is it would use a file (through std::fstream or something) rather than a vector.
  • Javascript side: No breaking changes to the existing Javascript api. It would use the exact same Blob class that already exists, just with its native handle pointing to a FileBlob instance rather than Blob.
  • Javascript side: Create method fs.getFileBlob('some-file-path.txt') to get a Blob instance that is file-based
    • If no file path is provided, a file is created in the temp directory under some random name

I'm currently working on implementing this and opened this issue to get some feedback on it.
cc @mcollina

What alternatives have you considered?

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature requestIssues requesting new Node.js features.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions