做一个到处海报的需求,需要点击 button 下载对应的海报图片,开始本来以为很简单,一行代码搞定。

    1. window.open('xxxxxxxx')

    如果通过 window.open 打开 zip、csv 等等文件,Chrome 会自动下载文件,但是,如果传入的字符串是一个图片地址的话,Chrome 会在新的标签页打开图片。

    通过 window.open 的方法是不行了。。。

    最后的方式通过 downloadjs 包进行了下载,这个包也有对应的 type 文件,ts 支持也不用担心。

    使用也很简单

    1. import download from 'downloadjs'
    2. download('xxxxx')

    需求完成了,就翻一下源码看看是怎么实现的吧~

    主要通过这一段代码进行的下载操作:

    1. if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument
    2. fileName = url.split("/").pop().split("?")[0];
    3. anchor.href = url; // assign href prop to temp anchor
    4. if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:
    5. var ajax=new XMLHttpRequest();
    6. ajax.open( "GET", url, true);
    7. ajax.responseType = 'blob';
    8. ajax.onload= function(e){
    9. download(e.target.response, fileName, defaultMime);
    10. };
    11. setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:
    12. return ajax;
    13. } // end if valid url?
    14. } // end if url?