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