本篇内容主要讲解“javascript如何实现下载功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript如何实现下载功能”吧!
javascript实现下载功能的方法:1、通过a标签实现下载;2、通过“window.open”方法实现下载;3、通过“location.href”方法实现下载;4、通过文件流转blob对象实现下载功能。
js实现文件下载功能
一、a标签下载
<body><button onClick="download()">a标签下载</button><script>function download(url = 'http:www.xxx.com/download?name=file.pdf', fileName = '未知文件') { const a = document.createElement('a'); a.style.display = 'none'; a.setAttribute('target', '_blank'); fileName && a.setAttribute('download', fileName); a.href = url; document.body.appendChild(a); a.click(); document.body.removeChild(a); }</script></body>
优点:
可以直接下载txt、png、pdf、exe、xlsx等类型文件
缺点:
a标签只能做get请求,所以url有长度限制
无法获取下载进度
跨域限制
无法在header中携带token做鉴权操作
无法判断接口是否成功
IE兼容问题
二、window.open下载
<body> <button onclick="download('http://www.xxx.com/download?name=file.pdf')">window.open下载</button> <script> function download(url) { window.open(url, '_self'); /** * _blank:在新窗口显示目标网页 * _self:在当前窗口显示目标网页 * _top:框架网页中在上部窗口中显示目标网页 /** } </script></body>
优点:
简单方便
缺点:
会出现URL长度限制问题
需要注意url编码问题
无法获取下载进度
无法在header中携带token做鉴权操作
无法判断接口是否成功
无法直接下载浏览器可直接预览的文件类型(txt、png、pdf会直接预览)
三、location.href 下载
<body> <button onclick="download('http://www.xxx.com/download?name=file.pdf')">location.href下载 </button> <script> function download(url) { window.location.href = url; } </script></body>
优点
简单方便直接
可以下载大文件(G以上)
缺点
会出现URL长度限制问题
需要注意url编码问题
无法获取下载进度
无法在header中携带token做鉴权操作
无法直接下载浏览器可直接预览的文件类型(txt、png、pdf会直接预览)
无法判断接口是否返回成功
三、文件流转blob对象下载
<button onclick="download()">文件流转blob对象下载</button> <script> download() { axios({ url: 'http://www.xxx.com/download', method: 'get', responseType: 'blob', }).then(res => { const fileName = res.headers.content-disposition.split(';')[1].split('filename=')[1]; const filestream = res.data; // 返回的文件流 // {type: 'application/vnd.ms-excel'}指定对应文件类型为.XLS (.XLS的缩写就为application/vnd.ms-excel) const blob = new Blob([filestream], {type: 'application/vnd.ms-excel'}); const a = document.createElement('a'); const href = window.URL.createObjectURL(blob); // 创建下载连接 a.href = href; a.download = decodeURL(fileName ); document.body.appendChild(a); a.click(); document.body.removeChild(a); // 下载完移除元素 window.URL.revokeObjectURL(href); // 释放掉blob对象 }) } </script>
优点:
可以下载txt、png、pdf等类型文件
可以在header中携带token做鉴权操作
可以获取文件下载进度
可以判断接口是否返回成功
缺点:
兼容性问题,IE10以下不可用,注意Safari浏览器,官网给出 Safari has a serious issue with blobs that are of the type application/octet-stream
将后端返回的文件流全部获取后才会下载
到此,相信大家对“javascript如何实现下载功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!