将文本作为下载文件发送

时间:2015-04-10 08:02:41

标签: node.js express

尝试将简单文本字符串作为文件发送,根据请求以特定名称下载。似乎无法弄清楚此代码失败的原因。

var text_ready = "This is a content of a txt file."
res.setHeader('Content-type', "application/octet-stream");
res.setHeader('Content-disposition', 'attachment; filename=file.txt');
res.send( new Buffer(text_ready) );

当执行此代码时,我只收到一个XHR响应(该字符串作为内容),但没有启动下载。但我希望收到此回复会强制浏览器下载一个文件file.txt作为名称,其中包含上述字符串的内容。

如何解决这个问题?我做错了什么?

也许这很重要:在Windows上的Chrome 41下工作。

编辑:似乎我必须更深入地描述一下。工作流程如下:

  • 页面包含一个表格单元格,每个表格单元格附有角度ng-click个事件
  • 点击GET请求时发送到" / download"使用jQuery' $ .get(" / download")
  • 服务器具有处理此GET请求的路由
  • 我需要实现的是将某个文本字符串发送给用户并保存为文件(以便在点击时启动下载,不久之后)

testings

  1. 当我导航手动输入该网址时输入此网址到地址栏并按Enter键
  2. 无法正常工作当我在该单元格点击鼠标时 - 发送请求,收到响应但未启动下载。

1 个答案:

答案 0 :(得分:10)

在我的node.js版本0.12.2,Windows 7,Chrome和Firefox

上测试
var http = require('http');

http.createServer(function (req, res) {
var text_ready = "This is a content of a txt file."


res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':'attachment; filename=file.txt'});

res.end( text_ready );
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');

我认为你没有运行最新版本的node.js.也许您只能更改Content-type标头,这可能有用。此外,您可以使用res.end( new Buffer(text_ready) );。我测试了它。

<强>编辑: 如何使用javascript(jQuery onclick)调用从node.js下载文件:

使用Javascript:

<script type="text/javascript">
$(document).ready(function(){
    $("#button").on('click',function(){
        window.location = 'http://127.0.0.1:1337/';
    });
});
</script>

HTML:

<button id="button">Download</button>

我确定你知道如何从jQuery重写为angularJS。 :) 我认为这比使用Ajax调用更好。如果你真的需要Ajax,我会发现如何去做。