2014-02-22 23 views
16

1流呢)我使用express.js从字符串创建node.js的一个文本文件,并响应

2)我有一个字符串“Hello World!”

3)我希望用户点击

<a href=/download>Download</a> 

4)用户应该得到hello.txt的下载与它的文本,而不是打开一个标签与文本。我已经找到了实现这个目标的方法,我猜测它与从缓冲区和管道创建readstreams到响应有关,但我大部分的例子都是从磁盘读取实际文件,我没有想从磁盘读取,我只想用从字符串创建的文件进行响应。

谢谢!

+0

是否要创建一个下载链接并让用户下载该文件? – V31

+0

是的下载链接,但创建一个下载链接不是主要问题,我如何转换字符串“Hello World!”以expressjs的形式发送到一个文本文件。 – user1323136

+0

尝试使用socket.io并将txt文件作为套接字消息发送,而不是依赖于req-res模块 – V31

回答

24

我想我明白你想要做什么。您想要将.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

+3

''Content-Disposition“:”attachment; filename = \“Hello.txt \”“'会有所帮助,但仅限于某些浏览器。 –

+0

嘿,谢谢你,你说得对,我想你的答案几乎就在那里,除了我想给文件命名。 – user1323136

+0

如果这个答案解决了您的问题,请您将此标记为解决方案吗? – tsturzl

1

感谢您的帮助,这就是我最终得到的结果: @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(); 
+0

您指定您使用快递。如果你打算使用快递,我建议实际使用它。你在做什么是纯粹的node.js – tsturzl

1

这对我有用!

var text="hello world"; 

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

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

res.send(text); 
相关问题