Discussed in #4767
Originally posted byliyang9331September 27, 2021
ctx.set('content-type', 'video/mp4');//设置返回类型
let stream = fs.createReadStream('./assets/test.mp4');
if (stream) {//判断状态
stream.on('open', function () {
console.log('文件打开')
});
stream.on('end', function () {
console.log("读取完毕")
})
stream.on('data', function (data) {
// console.log("读取文件流")
ctx.body = data
})
stream.on('err', function () {
console.log("发生错误")
})
stream.on('close', function () {
console.log('关闭')
// ctx.end
});
}
5条答案
按热度按时间apeeds0o1#
谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。
kmbjn2e32#
only
ctx.body = stream
,koa will handle stream3qpi33ja3#
谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。
不可以多次响应,如何分段返回媒体流?
ctx.body = stream,不是将整个媒体流返回了吗?
ftf50wuq4#
不可以多次响应,如何分段返回媒体流? ctx.body = stream,不是将整个媒体流返回了吗?
要多次分段返回只能自己切割后多次靠逻辑组合多次请求。
http 请求自身本来就只能 send 一次,或者你可以用
stream.PassThrough
自己控制输出速度。nzk0hqpo5#
谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。
不可以多次响应,如何分段返回媒体流?
ctx.body = stream,不是将整个媒体流返回了吗?
你是在 data 事件里面赋值的啊, 这是一个重复行为。而且没有 await 事件