Node.js 将文本作为下载文件发送
试图以文件的形式发送简单的文本字符串,根据请求以特定的名称下载。似乎无法理解此代码失败的原因Node.js 将文本作为下载文件发送,node.js,express,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(
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上的Chrome41下工作
编辑:似乎我需要更深入地描述一下。工作流程如下所示:
- 页面包含一个表格单元格,每个单元格都附加了角度
事件ng click
- 单击GET时,使用jQuery的$.GET(“/download”)将请求发送到“/download”
- 服务器具有处理此GET请求的路由
- 我需要实现的是,将某个文本字符串发送给用户并保存为文件(这样,在单击后即开始下载)
在my 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。也许您只能更改内容类型标题,这可能会起作用。此外,您还可以使用res.end(新缓冲区(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>
$(文档).ready(函数(){
$(“#按钮”)。在('单击',函数()上{
window.location=http://127.0.0.1:1337/';
});
});
HTML:
下载
我相信您知道如何将jQuery重写为angularJS:)
我认为这比使用Ajax调用要好。如果您真的需要Ajax,我将了解如何使用。我有node 0.11.30和express 4.3.2。还是不行。这可能是因为这是一个使用jQuery的POST请求(不是GET请求)?您不能使用ajax调用下载文件。可以使用iframe吗?有些人会想
或者尝试这样做:我编辑了最初的问题,以便更好地描述我正在尝试做的事情。正如我所理解的,这个问题是由ajax造成的。使用window.location=“/download/”
,它可以正常工作,但我会将您的答案标记为可以接受。