流文件下载

222 阅读1分钟

正文第一句——「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

前言

有一种业务需求,运营需要通过前端的查询条件,从后端数据库导出大量数据,假设要导出一个30万条以上数据的Excel文件,而这些数据是随时变动的,每次都需要最新的数据,我们称这种为“现倒”(现场导出),应该怎么做?

肯定有小伙伴说了,这还不简单,请求接口传递筛选项,让后端返回一个文件地址,前端一个A标签download不就完了?

如果后端运行在docker容器中,为安全考虑不提供无权限的公共文件夹路径,而且不能让运营等太久,上传oss再给链接?先不考虑数据时效性,运营也等不了这么久。

这时的你应该怎么做?

后端返回二维数组由前端导出?

数据小的时候这没问题,30万?100万?你猜会是后端卡住,还是数据库卡住?

正确做法

由后端返回二进制流文件,前端创建临时链接,由A标签download

这里注意responseType要为blob

响应头中的文件名bug

文件名用中文会出现乱码 最好用Base64传递,前端使用Base64解码

js 原生的API atob 与 btoa不能解析中文 下面是两种解码方式