HTML+JS实现浏览器下载图片
引用:出处
a标签download属性
如果使用a标签指向一个图片的话,你会发现点击链接时它会直接在浏览器中打开图片并显示
1
| <a href="http://www.baidu.com/img/baidu_jgylogo3.gif" />
|
但是这样的话,就存在一个问题,如果我想点击a链接直接下载图片到本地,该怎么实现呢?
在查阅资料之后,发现a标签有一个download的属性,添加了该属性,a标签将直接下载文件,并根据download属性的值设置下载文件的文件名,不为download属性设置值则文件将以默认文件名下载
1 2 3 4 5 6
| <a href="./baidu_jgylogo3.gif" download />
<a href="./baidu_jgylogo3.gif" download="baidu" />
<a href="./baidu_jgylogo3.gif" download="baidu.png" />
|
但是这个办法有一个弊端,它仅支持同源链接下载,非同源链接还是会直接打开图片:
1 2 3 4
| <a href="./baidu_jgylogo3.gif" download />
<a href="http://www.baidu.com/img/baidu_jgylogo3.gif" download />
|
获取返回的Blob
后来在download.js官网中看到了如下的示例:
1 2 3 4 5
| var x=new XMLHttpRequest(); x.open("GET", "http://danml.com/wave2.gif", true); x.responseType = 'blob'; x.onload=function(e){download(x.response, "dlBinAjax.gif", "image/gif" ); } x.send();
|
该示例的思路是,通过XMLHttpRequest()请求图片链接,然后获取返回的Blob
。那结合上面下载图片的方法,就能下载图片了
1 2 3 4 5 6 7 8 9 10 11
| var x=new XMLHttpRequest(); x.open("GET", "http://danml.com/wave2.gif", true); x.responseType = 'blob'; x.onload=function(e){ var url = window.URL.createObjectURL(x.response) var a = document.createElement('a'); a.href = url a.download = '下载后的文件名.gif' a.click() } x.send();
|
通过这种方法下载图片,gif图也能够显示正常了。
注意:上述方法能够兼容大部分浏览器,但是不兼容IE浏览器(不支持download属性)。要兼容IE浏览器需要用其他办法。