[JS]前端下载的实现
来源:互联网 发布:蜂窝数据qq打不开 编辑:程序博客网 时间:2024/05/03 08:51
版权声明
本文是在家中思考,查阅互联网开源文献综合实验后得出的,版权:公开
起因
之前一直纠结前端下载是不是触发了浏览器的下载就完成了?后来上网百度了一下,发现并不是的。还是可以追踪到的。
referrer
[1] 用JS在浏览器中创建下载文件
[2] initEvent() 方法
[3] binary-xhr
[4] JS中decodeURI()与decodeURIComponent()区别
思考实现
function download(url) { var xhr = new XMLHttpRequest(); xhr.onprogress = function (ev) { console.log('process', ev); }; xhr.onreadystatechange = function () { console.log('state:' + xhr.readyState, 'status', xhr.status); var fileName = "undefine_file"; if (xhr.readyState === 4) { if (xhr.status === 200) { downloadFile(fileNameFromHeader(xhr.getResponseHeader("Content-Disposition")), xhr.response); } else { alert('error:' + xhr.status); } } }; xhr.onerror = xhr.ontimeout = function() { console.log('error', arguments); }; xhr.open("get", url, true); xhr.responseType = 'arraybuffer'; xhr.setRequestHeader("Content-Type", "application/octet-stream"); xhr.send(null);}function fileNameFromHeader(disposition) { var result = null; if (disposition && /filename="(.*?)"/ig.test(disposition)) { result = /filename="(.*?)"/ig.exec(disposition); return decodeURI(result[1]); } return "undefine_file";}function downloadFile(fileName, content){ var aLink = document.createElement('a'); var blob = new Blob([content]); var evt = document.createEvent("HTMLEvents"); evt.initEvent("click", false, false);//initEvent 不加后两个参数在FF下会报错, 感谢 Barret Lee 的反馈 aLink.download = fileName; aLink.href = URL.createObjectURL(blob); aLink.dispatchEvent(evt);}
交流
有任何疑问,欢迎留言交流。
0 0
- [JS]前端下载的实现
- JS前端实现表格下载的方法
- [前端] JS实现文件下载
- 前端下载的实现
- 前端js怎么实现文件下载
- JS前端下载文件
- Js下载进度条的实现
- 用director.js实现的前端路由
- 前端面试:js的继承实现
- 【转载】前端常见算法的JS实现
- 前端常见算法的JS实现
- 前端常见算法的JS实现
- JS前端验证码的实现
- 在node.js下浅谈前端下载文件的方法
- js分页实现,前端实现。
- 文件下载的三种方式,前端和后端实现
- web前端 下载(导出)功能的实现
- python实现网站的js文件下载
- 软件项目规模评估
- 第一单元:微积分
- AOP之代理模式与装饰着模式
- 无监督学习(unsupervised learning) 5.生成模型
- 失眠有感
- [JS]前端下载的实现
- 小白学习作业-Day02
- 开通博客喽!
- Android异步线程之AsyncTask
- 《风之旅人》游戏设计思想一
- 【测试】
- 题目1102:最小面积子矩阵
- 题目1103:二次方程计算器
- Linux系统安装、卸载Anaconda要点