javascript - 如何从 Node.JS 套接字流触发浏览器下载?

标签 javascript node.js express

我的 node.js 应用程序通过 var socket = net.createConnection(port, ip); 连接以从另一台服务器下载文件。一旦建立连接,服务器就会将文件作为数据发送。

然后我通过做捕获它

socket.on('data', function(data) {

}).on('connect', function() {

}).on('end', function() {
console.log('DONE');
});

我最初的目标是,使用上述方法下载文件,同时将字节作为可下载文件提供给客户端浏览器。例如:用户点击网站上的一个按钮,触发服务器端下载功能,用户得到文件保存提示。 Node.JS 然后从远程服务器下载文件,同时将每个新字节提供给浏览器客户端的用户。这可能吗?我想它需要发送八位字节流的 header 来触发浏览器 Node.JS 之间的文件传输。但是如何呢?

更新

现在我在下面的答案的帮助下尝试了下面的代码:

app.get('/download', function (req, res) {

res.setHeader('Content-disposition', 'attachment; filename=' + "afile.txt");
res.setHeader('Content-Length', "12468")

var socket = net.createConnection(1024, "localhost");
console.log('Socket created.');
socket.on('data', function(data) {

    socket.pipe(res)

}).on('connect', function() {
// // Manually write an HTTP request.
// socket.write("GET / HTTP/1.0\r\n\r\n");
}).on('end', function() {
    console.log('DONE');
    socket.end();
});

 });

数据正在作为下载发送到用户的浏览器,但最终结果是损坏的文件。我检查了里面的内容,似乎过程中的某些东西导致文件损坏。 我想现在我必须一个字节一个字节地写?而不是做 socket.pipe?

最佳答案

你需要设置content-disposition HTTP 响应中的 header :

  response.writeHead(200, {
    'Content-Disposition': 'attachment; filename=genome.jpeg; modification-date="Wed, 12 Feb 1997 16:29:51 -0500"'
  });
  yourDataStream.pipe(response);

参见 RFC2183

关于javascript - 如何从 Node.JS 套接字流触发浏览器下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960781/

相关文章:

json - Node 红色:Raspberry Pi 上的 "Error: inject node not deployed"

node.js - 如何使用node.js发布页面

javascript - 我如何在 PUG 模板引擎中显示对象?

javascript - 如何通过 FourSquare API 查看某处签到的人数?

javascript - nodemailer 无法在本地主机或云上工作?

node.js - Push() 位置,更改地址栏中的 URL 但它不呈现组件

javascript - Node.js项目中的具体url和参数

javascript - 在 npm 包中使用对等依赖

javascript - 使用单个函数隐藏多个输入

javascript - Angular $http.get 和 Express req.body 为空