您当前的位置:首页 > 计算机 > 编程开发 > Html+Div+Css(前端)

通过浏览器导出文件

时间:03-22来源:作者:点击数:

通过浏览器导出文件

fileCreater.js

//文件导出:二进制数据文件化, Chrome有效,别的浏览器支持未知
//data:String BASE64编码的字符串
//fileName:String 文件名,包含文件类型(如:xxx.xls)
export function fileExport(data, fileName){
  if(data == null){
    return
  }
  if(!fileName){
    fileName = 'file_'+now()+'.xls'
  }else{
    if(fileName.indexOf('${now}') !== -1){
      fileName = fileName.replace('${now}',now());
    }
  }
  //拿到文件名的后缀
  let fileNameArray=fileName.split(".")
  let fileType=fileNameArray[fileNameArray.length-1];
  console.log(fileType);
  let contentType="application/vnd.ms-excel";
  switch(fileType){
    case "xls":
        contentType="application/vnd.ms-excel";
        break;
    case "xlsx":
        contentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        break;
    case "csv":
        contentType="text/csv";
        break;
  }
  let binStr = window.atob(data),
      n      = binStr.length,
      u8arr  = new Uint8Array(n);

  while (n--) {
    u8arr[n] = binStr.charCodeAt(n);
  }

  const blob = new Blob([u8arr], {type: contentType});
  const url = URL.createObjectURL(blob);

  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  a.click();

  window.URL.revokeObjectURL(url);
}

function now(){
  const now = new Date();
  let year  = now.getFullYear(),
    month = now.getMonth()+1,
    date  = now.getDate(),
    hour  = now.getHours(),
    min   = now.getMinutes(),
    sec   = now.getSeconds();
  month = month<10 ? '0'+month : month;
  date  = date<10 ? '0'+date : date;
  hour  = hour<10 ? '0'+hour : hour;
  min   = min<10 ? '0'+min : min;
  sec   = sec<10 ? '0'+sec : sec;

  return ''+year+month+date+hour+min+sec;
}

使用fileCreater.js

import { fileExport } from "./fileCreater"
//data来自ajax请求的BASE64字符串
fileExport(data, "文件名[${now}].xls")
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐