Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从字符串在node.js中创建一个文本文件,并将其作为响应流_Node.js_Express_Stream - Fatal编程技术网

从字符串在node.js中创建一个文本文件,并将其作为响应流

从字符串在node.js中创建一个文本文件,并将其作为响应流,node.js,express,stream,Node.js,Express,Stream,我正在使用express.js 我有一个字符串“你好,世界!” 我想要一个用户点击 <a href=/download>Download</a> 用户应该下载包含文本的Hello.txt,而不是打开包含文本的选项卡 我环顾四周寻找实现这一点的方法,我猜这与从缓冲区创建readstreams和管道到响应有关,但我知道大多数示例都涉及从磁盘读取实际文件,我不想从磁盘读取,我只想用字符串创建的文件来响应 谢谢 我想我理解你的意图。您希望向客户端发送一个.txt文件,而不实

我正在使用express.js

  • 我有一个字符串“你好,世界!”

  • 我想要一个用户点击

    <a href=/download>Download</a>
    
    
    
  • 用户应该下载包含文本的Hello.txt,而不是打开包含文本的选项卡

  • 我环顾四周寻找实现这一点的方法,我猜这与从缓冲区创建readstreams和管道到响应有关,但我知道大多数示例都涉及从磁盘读取实际文件,我不想从磁盘读取,我只想用字符串创建的文件来响应


  • 谢谢

    我想我理解你的意图。您希望向客户端发送一个.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]);
    });
    

    作为将来的注意事项,您可以发送存储为变量的任何数据。例如,如果你有一个加载了图像的缓冲区,你可以通过改变
    内容类型来发送,否则浏览器不知道你发送的是什么数据,express我相信会将默认类型设置为
    文本/html
    。这里有一个很好的参考资料。

    谢谢大家的帮助,这就是我最后的收获: @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();
    

    这对我有用

    var text="hello world";
    
    res.setHeader('Content-type', "application/octet-stream");
    
    res.setHeader('Content-disposition', 'attachment; filename=file.txt');
    
    res.send(text);
    
    试试这个:

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

    你想创建下载链接并让用户下载文件吗?是的,下载链接,但创建下载链接不是主要问题,我如何转换字符串“Hello World!”尝试使用socket.io并将txt文件作为socket消息发送,而不是依赖req res模块。问题是如何创建该txt文件。
    “内容配置”:“附件;文件名=\”Hello.txt\“
    将有所帮助,但仅在某些浏览器中。嘿,谢谢你的帮助,你说得对,我想你的答案差不多了,只是我也想给文件命名。如果这个答案解决了你的问题,你能把它标记为解决方案吗?我想也应该指定内容类型。一些浏览器,如safari,会在文件名中添加.html扩展名。在我的例子中,我设置:
    res.set({'Content-Disposition':'attachment;filename=2015.csv','Content-type':'text/csv')这起作用了。为了将来,我发现有必要在文件名周围加上双引号,例如,
    res.set({'Content-Disposition':'attachment;filename=\'2015.csv\','Content-type':'text/csv')您指定正在使用express。如果您打算使用express,我建议您实际使用它。您正在做的是纯node.js