日常前端的导出大多是调后端接口导出,记录一下在工作中纯前端导出的方法。大致代码如下:(附注释)
//判断一下env文件里的开发环境
const execPath =
process.env.NODE_ENV == 'production'
? path.dirname(process.execPath)
: process.cwd();
//首先通过node的方法获取文件的路径
const logpath = path.join(execPath, 'logs');
console.log('log path :' + logpath);
//然后通过fse的方法将文件复制出来并取名
fse.copySync(logpath, path.join(execPath, 'getlogs'));
//通过admzip库addlocalFolder添加文件
var zip = new AdmZip();
zip.addLocalFolder(path.join(execPath, 'getlogs'));
//通过writezip方法压缩文件
zip.writeZip(path.join(execPath, 'log.zip'));
let zipLog = path.join(execPath, 'log.zip');
//然后在通过readFileSync方法将文件转成base64格式
let Filebase64 = fse.readFileSync(zipLog, { encoding: 'base64' });
//这个方法的base64有个缺陷就是没有自带头部,所以添加一下zip的头部
let blobFile = this.dataURLtoBlob(
'data:application/zip;base64,' + Filebase64
);
// const blob = new Blob([blobFile], {
// type: '*/*',
// });
let filename =
info.userName +
'-' +
Helper.format(new Date(), 'yyyy-MM-dd-HH:mm') +
'.zip';
if (window.navigator.msSaveOrOpenBlob) {
// 兼容IE10
navigator.msSaveBlob(blobFile, filename);
} else {
// 创建一个a标签超链接,将文件流赋进去,然后实现这个超链接的单击事件,将文件导出
const elink = document.createElement('a');
elink.download = filename;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blobFile);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
}
整体主要用到的是node方法,还有admzip库,然后通过js动态创建超链接下载。日常工作记录一下。