Koa 通过 stream 转发数据, 能否获取并带上 Response Headers?
是这样的.
目前有一个 get
请求接口, 接收前端的请求, 然后签名生成 token
, 去 cos
文件服务器下载文件返回给前端.
原来是直接重定向到对应的 cos
资源服务器下载, 没有问题.
但是现在由于要接入银行, 对外网网络访问比较严格, 不太希望多开放一个白名单. 所以我需要请求 cos
资源, 然后转发文件数据.
但是如果我通过:
const res = await request.get(cosurl);
ctx.body = res.body;
ctx.set(xxx, res.response.headers['xxxxx']);
这种方式请求完了转发, 当文件比较大的时候, 会下载很慢, 而且存在内存也是一个隐患.
而如果是:
ctx.set('content-disposition', `attachment; filename=${filename}`);
ctx.set('content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
ctx.body = request.get(cosUrl);
通过 stream
转发, 虽然我可以事先知道文件名, 文件格式. 但是拿不到文件大小 Content-Length
, 而且当特殊情况, 比如请求失败, 签名失败的时候, 由于我写死了文件类型, 就会下载一个 内容为报错信息 的文件.
所以我想, 能否通过 stream
转发的时候, 也能获取到 res.response.headers
, 然后返回给前端呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决了, 自问自答吧.