做一个到处海报的需求,需要点击 button 下载对应的海报图片,开始本来以为很简单,一行代码搞定。
window.open('xxxxxxxx')
如果通过 window.open 打开 zip、csv 等等文件,Chrome 会自动下载文件,但是,如果传入的字符串是一个图片地址的话,Chrome 会在新的标签页打开图片。
通过 window.open 的方法是不行了。。。
最后的方式通过 downloadjs 包进行了下载,这个包也有对应的 type 文件,ts 支持也不用担心。
使用也很简单
import download from 'downloadjs'
download('xxxxx')
需求完成了,就翻一下源码看看是怎么实现的吧~
主要通过这一段代码进行的下载操作:
if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument
fileName = url.split("/").pop().split("?")[0];
anchor.href = url; // assign href prop to temp anchor
if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:
var ajax=new XMLHttpRequest();
ajax.open( "GET", url, true);
ajax.responseType = 'blob';
ajax.onload= function(e){
download(e.target.response, fileName, defaultMime);
};
setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:
return ajax;
} // end if valid url?
} // end if url?