下载方式总结
近期遇到从服务器下载size较大的资料时等待时间过长且没有下载进度提示的问题,导致用户以为服务卡死,所以结合自身开发环境与测试结果,做出以下总结
结果 | 下载源 | 下载方式 | 是否存在跨域问题 | 是否存在ssl认证失败的问题(https协议时) | 文件类型 | 直接在浏览器中打开Content-Disposition=inline | 下载到本地Content-Disposition=attachment | 是否显示浏览器下载进度 | 耗时 |
---|---|---|---|---|---|---|---|---|---|
NG(跨域问题) | 网盘 | 前端通过XMLHttpRequest向网盘发请求 | 是 | 否 | - | - | - | - | - |
NG(pdf和mp4会直接打开) | 同上 | 前端通过window.open(网盘url)的方式 | 否 | 否 | pdf,MP4 | 是 | 否 | 否 | - |
OK(耗时短且显示进度条) | 同上 | 同上 | 否 | 否 | pdf,MP4,zip | 否 | 是 | 是 | 30s以内 |
NG(ssl认证失败) | 同上 | 调用后台下载资料的API,前台读取后台返回的文件流 | 否 | 是 | pdf,MP4,zip | inline或attachment都可以 | inline或attachment都可以 | 否 | 5分钟以上 |
NG(耗时长且不显示进度条) | 磁盘 | 调用后台下载资料的API,前台读取后台返回的文件流 | 否 | 否 | pdf,MP4,zip | inline或attachment都可以 | inline或attachment都可以 | 否 | 5分钟以上 |
经确认,只有通过网盘下载,且通过window.open(网盘url)的方式,或点击a标签的网盘link方式下载时,不会出现跨域问题,也可以显示浏览器的下载任务和进度,最重要的是下载速度很快
不过,需要注意的是,需将网盘下载文件的配置改为Content-Disposition=attachment,防止MP4,pdf类型文件在网页直接打开
另外,关于跨域问题,还值得进一步研究,即使将网盘的Access-Control-Allow-Origin设置为*,也没有解决跨域的问题,希望解决过类似问题的小伙伴能分享一下。