从string中创建node.js中的文本文件并将其作为响应进行流式处理

时间:2014-02-22 05:15:39

标签: node.js express stream

  1. 我正在使用express.js

  2. 我有一个字符串“Hello world!”

  3. 我希望用户点击

    <a href=/download>Download</a>
    
  4. 用户应该使用其中的文本下载Hello.txt,不要打开带有文本的标签。

  5. 我已经四处寻找实现这一目标的方法,我猜它与从缓冲区和管道创建读取流到响应有关,但我的大多数例子都是从磁盘读取实际文件,我不知道我想从磁盘读取,我只想回复一个从字符串创建的文件。

  6. 谢谢!

4 个答案:

答案 0 :(得分:28)

我想我明白你要做什么。您希望将.txt文件发送到客户端,而无需在光盘上实际创建文件。

这实际上非常简单,非常简单。您所要做的就是在标题中设置MIME类型,但是大多数浏览器默认情况下不下载.txt文件。他们只是打开并显示内容。

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]);
});

作为未来的注释,您可以发送存储为变量的任何数据。例如,如果您有一个加载了图像的缓冲区,您可以通过更改Content-Type以相同的方式发送,否则浏览器不知道您要发送的是哪些数据,并表达我相信设置默认值输入text/html。这是对Internet Media Types and MIME types的一个很好的参考。

答案 1 :(得分:2)

感谢帮助人员,这就是我最终的结果: @aaron,有没有办法在所有浏览器中使用处理?

res.setHeader('Content-disposition', 'attachment; filename=theDocument.txt');
res.setHeader('Content-type', 'text/plain');
res.charset = 'UTF-8';
res.write("Hello, world");
res.end();

答案 2 :(得分:2)

这对我有用!

var text="hello world";

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

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

res.send(text);

答案 3 :(得分:2)

试试这个:

router.get('/download', (req, res) => {
  var text = 'Hello world!'
  res.attachment('filename.txt')
  res.type('txt')
  res.send(text)
})