发送文本作为下载文件

尝试发送简单的文本string作为文件,根据请求下载某些名称。 似乎无法弄清楚为什么这个代码失败。

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响应(将该string作为内容),但没有下载正在启动。 但是我期望收到这个响应会强制浏览器下载一个带有file.txt的文件作为上面string的内容。

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

也许这很重要:在Windows下使用Chrome 41。

编辑:看来,我不得不形容更深一点。 工作stream程如下:

  • 页面包含一个表格单元,每个单元都带有angular度ng-click事件
  • 当点击一个GET请求被发送到“/下载”使用jQuery的$ .get(“/下载”)
  • 服务器有路由来处理这个GET请求
  • 我需要做的是将一个特定的文本string发送给用户并保存为一个文件(这样一个下载正在启动,点击即可)

testings

  1. 工作时,我手动导航到该urlinput此url地址栏,然后按Enter键
  2. 当我用鼠标点击那个单元时,它不工作 – 请求被发送,响应被接收,但是没有下载被启动。

testing我的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。 也许你可以只更改内容types的头,这可能工作。 另外,你可以使用res.end( new Buffer(text_ready) ); 。 我testing过了。

编辑: 如何使用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,我会发现如何去做。