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