Create a text file in node.js from a string and st

2019-03-14 11:54发布

  1. I am using express.js

  2. I have a string "Hello world!"

  3. I want a user to click on

    <a href=/download>Download</a>
    
  4. The user should get Hello.txt download with the text in it, NOT open a tab with the text.

  5. I have looked around for ways to achieve this, I am guessing it has something to do with creating readstreams from buffer and piping to response, but I most of the examples dealt with reading actual files from disk, I don't want to read from disk, i just want to respond with a file created from a string.

Thanks!

4条回答
贪生不怕死
2楼-- · 2019-03-14 12:20

Thanks for the help guys, this is what i ended up with: @aaron, is there a way for disposition to work in all browsers?

res.setHeader('Content-disposition', 'attachment; filename=theDocument.txt');
res.setHeader('Content-type', 'text/plain');
res.charset = 'UTF-8';
res.write("Hello, world");
res.end();
查看更多
贼婆χ
3楼-- · 2019-03-14 12:20

this is working for me !

var text="hello world";

res.setHeader('Content-type', "application/octet-stream");

res.setHeader('Content-disposition', 'attachment; filename=file.txt');

res.send(text);
查看更多
在下西门庆
4楼-- · 2019-03-14 12:23

I think I understand what you're trying to do. You want to send a .txt file to the client without actually creating a file on disc.

This is actually pretty basic, and extremely easy. All you have to do is set your MIME type in the header, however most browsers don't download .txt files by default. They just open and display the contents.

var text={"hello.txt":"Hello World!","bye.txt":"Goodbye Cruel World!"};
app.get('/files/:name',function(req,res){
   res.set({"Content-Disposition":"attachment; filename=\"req.params.name\""});
   res.send(text[req.params.name]);
});

As a future note, you can send any data that's stored as a variable. If you have a buffer loaded with an image, for example, you can send that the same way by just changing the Content-Type, otherwise the browser has no idea what data you're sending, and express I believe sets the default type to text/html. Here is a good reference to Internet Media Types and MIME types.

查看更多
放荡不羁爱自由
5楼-- · 2019-03-14 12:32

Try this:

router.get('/download', (req, res) => {
  var text = 'Hello world!'
  res.attachment('filename.txt')
  res.type('txt')
  res.send(text)
})
查看更多
登录 后发表回答