gpt4 book ai didi

node.js - 如何发送 readstream 作为响应

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:31 24 4
gpt4 key购买 nike

当我尝试发送读取流作为响应时,我收到错误

    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);

response.send(readStream)
})
.listen(2000);

我想作为response.send(readStream)发送而不是作为readStream.pipe(response);有可能这样发送吗?

最佳答案

Node 中的HTTP响应对象(上面代码中的response)是一个可写流。这意味着如果我们有一个表示 myfile.mp3 内容的可读流,您只需将文件内容通过管道传输到响应对象中即可。这看起来像这样:

readStream.pipe(响应)

这可以防止文件(即 myfile.mp3)在作为响应发送之前完全加载到内存中,并且是建议这样做的方法,以防止服务器上的高内存压力侧面。

是否有可能在不使用pipe()的情况下发送文件?

实际上有一种方法允许在不使用pipe()的情况下发送文件,但不鼓励这种方法,因为它首先将整个文件加载到内存中,然后将文件写入响应对象。无论如何,这里有一个关于如何执行此操作的示例:

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
});

fs.readFile(filePath, (err, data) => {
if (err) throw err;
response.end(data);
});
}).listen(2000);

关于node.js - 如何发送 readstream 作为响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53552594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com