我正在使用express.js
我有一个字符串“Hello world!”
我希望用户点击
<a href=/download>Download</a>
用户应该使用其中的文本下载Hello.txt,不要打开带有文本的标签。
我已经四处寻找实现这一目标的方法,我猜它与从缓冲区和管道创建读取流到响应有关,但我的大多数例子都是从磁盘读取实际文件,我不知道我想从磁盘读取,我只想回复一个从字符串创建的文件。
谢谢!
答案 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)
})