如何将 比较大的数据量 用stream 下载?
发布于 6 年前 作者 gjc9620 3681 次浏览 来自 问答

工作中遇到的问题 原先是 后端执行sql语句查询了很多数据 然后转成xlsx 返回给前端 前端啥都不用干直接get请求这个就行了 就能下载了

但是有一天返回的数据量特别大 容易504 我就寻思着使用stream 查询 返回给前端 Model.where('created').gte(twoWeeksAgo).stream().pipe(writeStream); 就像这样 但是这样前端就要自己拼接buffer Blob 处理 然后转成xlsx ? 又或者 使用stream 查询数据库 然后用 stream 一部分先转xlsx 返回给前端? 请问这两种方法可行么 问问 大家平时遇到这样的问题都怎么处理的

7 回复

这个业务我刚做过,也想了你的这个问题,还没优化,小公司数据不多

@dengnan123 请问是怎么解决的?

@gjc9620 我没优化啊 小公司 我是直接下载的 所以后面代码肯定要改的

如果前端只是下载,我觉得方法二靠谱一点呀 如果后端能append加入xlsx就更方便了, 不知道你504是,写xlsx的服务器蹦了还是下载蹦了,服务器蹦了。 下载导致服务器崩溃的话,走流或者直接nginx应该就可以了吧

  1. 可以使用excel js 直接以文件流形式传到前端
  2. 后端返回数据,前端使用数据构建文件

应该是内存原因,

来自酷炫的 CNodeMD

我有一点想法,对于大数据我们应该控制流的写入速度,避免占用内存太高

回到顶部