前提
高级浏览器,如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");
});
----天下熙熙皆为利来,天下攘攘皆为利往