Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[suggestion] send/respond with blob #4807

Open
jimmywarting opened this issue Feb 4, 2022 · 5 comments
Open

[suggestion] send/respond with blob #4807

jimmywarting opened this issue Feb 4, 2022 · 5 comments
Labels

Comments

@jimmywarting
Copy link

jimmywarting commented Feb 4, 2022

NodeJS now has support for Blob's globally,
...earlier you had to load it from require('buffer').Blob

it would be cool / awesome if it where possible to respond with a Blob by doing something like

const str = `<h1>Hello World</h1>`
const blob = new Blob([str], { type: 'text/html' })
const file = new File([blob], 'index.html', { type: 'text/html' })

app.get('/', (req, res) => {
  res.send(blob) // or:
  res.download(blob, 'name.html')
  res.download(file) // name taken from file instead
})

Doing this would take care of

  1. Setting the response header content-type to the blob's type (only if content-type haven't been set manually)
  2. Setting the response header content-length to the blob's size
  3. and pipe the data from blob.stream() to the response
  4. if you used res.download(blob) then it would also add content-disposition attachment header

it's also looking like if node will at some point add a way of getting blobs from the filesystem also, but i don't know when.
ref: nodejs/node#39015

edit: NodeJS just shipped fs.openAsBlob(path, { type }) in v20+

@dougwilson
Copy link
Contributor

I think this is a great idea.

@jimmywarting
Copy link
Author

jimmywarting commented Feb 9, 2022

Yeay, then I could take advantage of fetch-blob/from.js methods that can retrieve a Blob/File from the file system. or use undici or node-fetch await res.blob() even

If you would accept 3th party blob look-a-like objects ofc...

this idea came to me when i worked on a current project that uses a template engine.
i just thought, wouldn't it be nice if consolidate.js or the static folder plugin could just simply give you a blob instead :P

var cons = require('consolidate');
cons.swig('views/page.html', function(err, blob){
  res.send(blob)
});

So if Blob are not the only thing you are going to support, then there is one extra idea coming from the File object
and that is to send lastModifiedDate as a caching header.
and also use the file.name when downloading using res.download(file)

@debadutta98
Copy link

Hi @dougwilson , i want to take up this issue can you please assign me ?

@jimmywarting
Copy link
Author

fyi, NodeJS just shipped fs.openAsBlob(path, { type }) in v20+
wish I where able to use it now.

@dougwilson
Copy link
Contributor

No worries, there is a PR open that is very close to landing 👍 . Should be in the next Express release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants