一般都是利用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端下载大文件和批量下载,最好后端处理