因为文件挺大的
一个get/post请求往往会超时
一般的下载:点击得到一个链接 用户可以看到下载进度那种
是怎么做的?
后续:
参考官方例子
算是实现了
但是有一个新问题
前端用axios来做每次都是等所有数据都下载完了才会返回 而用a标签可以直接打开保存窗口 看到下载进度
如何用axios来实现下载进度呢?
###由于官方文案https://github.com/eggjs/exam...
只用适用于a标签
所以我的解决方案是:
后端管理一个下载映射:文件和hash
每次用户点击以后,后端返回其他数据和一个唯一hash标记
前端拿到标记 再用a标签去请求如官方文档所诉方法的对应接口来实现下载
浏览器侧的表现是正确响应数据并打开一个保存窗口
###AJAX 请求有 onprogress
回调啊。
下载文件功能,实际上后端有两个动作,第一步是生成文件,第二步是把文件流传给前端。
第二步不会有超时问题,直接交给http和浏览器,http有Content-Length、Range、Content-Range等首部字段,浏览器会帮你实现转圈、显示下载比例等效果。
问题在第一步,会有超时时间限制,假设一次请求超过60s会自动断开,如果60s内不能生成好文件,就504了。可以用websocket长连接保持连接不断开,并且通过ws发送下载进度给前端,前端做进度条。
###直接用a标签的download属性。如果不是点击a下载,也可以把a隐藏,做其他操作,用js触发a的click事件就可以了
读流,大文件下载,不怕浏览器崩掉么