前提

高级浏览器,如Chrome,IE>10,支持Blob、FileReader等API;

依赖库

file-saver //npm install file-saver -S

jszip //npm install jszip -S

iconv-lite //npm install iconv-lite -S

实现

    const {saveAs} = require('file-saver');
    const JSZip = require('jszip');
    const iconv = require('iconv-lite');
    
    //xmls : 事先定义好的多个Excel Xml内容数组
    let zipBlob = new JSZip();
    [].forEach.call(xmls, (xml, index) => {
        let tmp = compileTmpl(xml, 'excel');
        let blob = new Blob([tmp], {
            type: "text/plain;charset=utf-8"
        });
        let fileName = reportExportNames[index] + '.xls';
        // 把Blob对象创建成对应的文件,放入JSZip实例中
        zipBlob.file(fileName, blob, {type:"blob"});
    });
    zipBlob.generateAsync({
        type:"blob",
        // 默认utf-8编码在window7上会默认使用本地编码方式编码导致中文文件名乱码,
        // 这里使用encodeFileName解决这个bug,
        // 详见:https://github.com/Stuk/jszip/issues/210
        encodeFileName: function(str){
            return iconv.encode(str, 'gb2312');
        }
    }).then(function (blob) {
        //利用file-saver实现zip文件下载
        saveAs(blob, "报表.zip");
    });

----天下熙熙皆为利来,天下攘攘皆为利往