一尘不染

Node.js发送文件作为响应

node.js

Expressjs框架具有sendfile()方法。我如何在不使用整个框架的情况下做到这一点。我正在使用node-native-
zip创建档案,并将其发送给用户。


阅读 267

收藏
2020-07-07

共1个答案

一尘不染

这是一个示例程序,它将通过从磁盘流式传输myfile.mp3来发送myfile.mp3(也就是说,在发送文件之前,它不会将整个文件读入内存)。服务器在端口2000上侦听。

[更新] 正如@Aftershock在评论中所提到的,util.pump它消失了,并被Stream原型上的一种称为pipe;
的方法所取代。下面的代码反映了这一点。

var http = require('http'),
    fileSystem = require('fs'),
    path = require('path');

http.createServer(function(request, response) {
    var filePath = path.join(__dirname, 'myfile.mp3');
    var stat = fileSystem.statSync(filePath);

    response.writeHead(200, {
        'Content-Type': 'audio/mpeg',
        'Content-Length': stat.size
    });

    var readStream = fileSystem.createReadStream(filePath);
    // We replaced all the event handlers with a simple call to readStream.pipe()
    readStream.pipe(response);
})
.listen(2000);

取自http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-
data-between-streams/

2020-07-07