请教一下大家关于Koa视频文件以流的形式返回给前端的问题
//这是上传视频文件的代码
@Post('/uploadVideo') uploadVideo(context: Koa.DefaultContext, next: Koa.Next) {
if (context.request.files) {
let src = 'http://127.0.0.1:80/uploadVideo/'
for (let key in context.request.files) {
let filename = context.request.files[key].path.split('uploadVideo\\')[1]
return context.body = {
code: 0,
message: 'success',
data: {
url: src + filename
}
}
}
}
context.body = {
code: -1,
message: 'upload error'
}
}
一开始我用的是 koa-static
静态文件代理的 /uploadVideo
接口返回视频文件路径,但是会出现以下错误:
Error: write ECONNRESET
code:"ECONNRESET"
errno:"ECONNRESET"
headerSent:true
message:"write ECONNRESET"
查了半天资料说是请求超时了才会出现这种情况,之后我将视频文件的代理换成了读写流:
app.use(async (context: Koa.DefaultContext, next: Koa.Next) => {
if (context.method === 'GET' && (context.request.url as string).includes('/uploadVideo')) { //判断是不是视频文件请求
let filename: string = context.request.url.split('uploadVideo/')[1]
let rs = fssync.createReadStream(__dirname + '\\public\\uploadVideo\\' + filename)
let stream = new Stream.PassThrough()
rs.on('data', (chunk) => {
stream.push(chunk, 'utf8')
context.body = stream //这是我自己尝试出来的,一开始我在end方法中输出的这个流,之后我尝试在这里输出了视频流,发现居然可以用,我想请教一下这种方式有没有问题?
})
rs.on('error', err => {
console.log(err)
})
} else {
await next()
}
})
我想请教一下大佬们这种方式有没有问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论