一般都是利用a标签去实现文件的下载;

  downloadFile(path) {
    let a = document.createElement("a");
    a.href = path;
    a.download = path;
    a.target = "_blank";
    a.click();
  },

问题一:大小限制

问题现象描述:在下载超过1G大文件的时候,加载到1个G的时候进度条会暂停一会,随后下载速度会降为0kb/s,再之后1-2秒后,进度条变为空,也就是重新下载。一直重复循环······

1G的文件下载问题,上网查了一下,是nginx代理的缓存默认为1个G,这个可以在nginx里面进行配置,proxy_max_temp_file_size等关于缓存的配置项,当时配置了4G;

继续测试1个G的文件,可以下载,没问题;

而后测试2G多的文件,发现下载到2G就卡住

发现是浏览器会限制下载的文件大小2G

问题二:数量限制

问题现象描述:碰到文件批量下载的业务,当时就是用a标签循环的方式实现的,批量下载20个文件,每次都会下载10-15个文件,其他文件没有被下载下来。

不知道什么原因,据说是浏览器限制,一段时间内下载的量被限制为10个

可以用jszip、file-saver插件进行打包实现批量下载,也可以通过setTimeout将下载时间隔开;

问题三:不知道什么玩意儿的问题

问题现象描述:也是批量下载,不过下载的文件为3个,大小在200MB-500MB之间,此时电脑连的是wife,三个文件下载的进度条会像问题一里描述的一样循环(三个文件下载的速度像是在抢网络);此时电脑连上网线,问题三就没了

据说是wife的策略问题,不太懂,也没查。

结论

不建议web端下载大文件和批量下载,最好后端处理

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐