打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
记一次vue将列表下载为excel的兼容写法

记一次vue将列表下载为excel的兼容写法

需求需要将后端返回的列表数据下载到本地,查询资料发现采用blob文件流下载

1、后端返回的是blob文件流,传统的模拟href点击在IE下不兼容,无法下载 故采用兼容写法如下

/* 批量文件下载 */export function listFileDownload(params) {  api({    url: '/mweb/mcif.TellerListDownLoad.do',    method: 'post',    headers: {      'Content-Type': 'application/x-www-form-urlencoded;application/octet-stream'    },    transformRequest: [() => {      let ret = ''      for (let i in params) {        ret  = encodeURIComponent(i)   '='   encodeURIComponent(params[i])   '&'      }      return ret    }],    data: params,    responseType: 'blob'  }).then(res => {    if ('msSaveOrOpenBlob' in navigator) {      var data = res      var blob = new Blob([data], { type: 'application/vnd.ms-excel' })      window.navigator.msSaveOrOpenBlob(data, 'MSPOptJnl'   new Date().getTime()   '.xls')    } else {      let blob = new Blob([res])      let downloadElement = document.createElement('a')      let href = URL.createObjectURL(blob)      downloadElement.href = href      downloadElement.download = 'mcif.TellerList_'   new Date().getTime()   '.xls'      document.body.appendChild(downloadElement)      downloadElement.click()      document.body.removeChild(downloadElement)      window.URL.revokeObjectURL(href)    }  })    .catch(err => {      console.log(err);    })}

2、后端列返回的是纯数组,采用模板拼接数据,IE采用msSaveBlob进行下载,chorme还是采用模拟点击,具体如下

/* 文件下载 */export function fileDownload(params) {  api({    url: 'msp.MspTransOprtJnl.do',    method: 'post',    data: params,  }).then(res => {    let str = `机构编号,机构名称,MSP客户编号,客户姓名,操作内容,操作起止日期\n`;    let name = ['TransDeptId', 'TransDeptName', 'OptId', 'OptName', 'TransBusGroupName', 'TransDate']    // 增加\t为了不让表格显示科学计数法或者其他格式    for (let i = 0; i < res.List.length; i  ) {      for (const key in res.List[i]) {        for (let j = 0; j < name.length; j  ) {          if (key == name[j]) {            str  = `${res.List[i][key]   '\t'},`;          }        }      }      str  = '\n';    }    if ('msSaveOrOpenBlob' in navigator) {      var blob = new Blob([decodeURIComponent(encodeURI(str))], { type: "text/csv;charset=utf-8;" });      navigator.msSaveBlob(blob, 'MSPOptJnl'   new Date().getTime()   '.xls');//filename文件名包括扩展名,下载路径为浏览器默认路径    } else {      // encodeURIComponent解决中文乱码      const uri = 'data:text/csv;charset=utf-8,\ufeff'   encodeURIComponent(str);      // 通过创建a标签实现      const link = document.createElement("a");      link.href = uri;      // 对下载的文件命名      link.download = 'MSPOptJnl'   new Date().getTime()   '.xls';      link.click();    }  })    .catch(err => {      console.log(err);    })}
来源:https://www.icode9.com/content-4-895901.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
vue中使用excel导入导出
技术干货:Vue框架下实现导入导出Excel及PDF
vue、element、axios、api 实现下载 excel 文件
vue中this.$route.query和this.$route.params & query传参和params传参的使用和区别
如何使用elemen-ui实现文件的上传与下载
JSP页面实现图片、PDF字节流的显示,Word、Excel、Zip字节流的下载功能的实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服