导出excel,文件打不开

导出excel,文件打不开

在这里插入图片描述
查看博客:
https://blog.csdn.net/qq_45796667/article/details/123875612?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-123875612-blog-122561103.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-123875612-blog-122561103.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=6

在这里插入图片描述

要注意responseType一定要设置

 return axios({
    url: '/api/esb/ddi/db/export/excel',
    // url: '/test/db/export/excel',
    params,
    method: 'GET',
    //设置blob或者arraybuffer
    responseType: 'blob',
    // responseType: 'arraybuffer',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
  })
    .then(res => {
      console.log(res);
      // 生产一个a标签
      let link = document.createElement('a')
      let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
      // let blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
      // let blob = new Blob([res.data], { type: 'application/msexcel;charset=utf-8' })
      // 将a标签隐藏
      link.style.display = 'none'
      // 给a标签设置url
      link.href = URL.createObjectURL(blob)
      link.download = res.headers['content-disposition'] //下载后文件名
      let name = link.download.split('=')[1]
      name=decodeURIComponent(name)
      link.download =name //下载的文件名
      // 将a标签添加在body中
      document.body.appendChild(link)
      // 触发a标签
      link.click()
      // 将a标签移除
      document.body.removeChild(link)
    }, error => {
      console.log(error);
      ElMessage.error({
        showClose: true,
        message: '无数据',
      })
    })

看博客还看到他们出现了返回数据是乱码的问题,是因为
mock模块会影响原生的ajax请求,使得服务器返回的blob类型变成乱码

原文链接:https://blog.csdn.net/weixin_42142057/article/details/97655591

在这里插入图片描述

// 初始化 Response 相关的属性和方法
Util.extend(MockXMLHttpRequest.prototype, {
   responseURL: '',
   status: MockXMLHttpRequest.UNSENT,
   statusText: '',
   // https://xhr.spec.whatwg.org/#the-getresponseheader()-method
   getResponseHeader: function(name) {
       // 原生 XHR
       if (!this.match) {
           return this.custom.xhr.getResponseHeader(name)
       }

       // 拦截 XHR
       return this.custom.responseHeaders[name.toLowerCase()]
   },
   // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method
   // http://www.utf8-chartable.de/
   getAllResponseHeaders: function() {
       // 原生 XHR
       if (!this.match) {
           return this.custom.xhr.getAllResponseHeaders()
       }

       // 拦截 XHR
       var responseHeaders = this.custom.responseHeaders
       var headers = ''
       for (var h in responseHeaders) {
           if (!responseHeaders.hasOwnProperty(h)) continue
           headers += h + ': ' + responseHeaders[h] + '\r\n'
       }
       return headers
   },
   overrideMimeType: function( /*mime*/ ) {},
   responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'
   response: null,
   responseText: '',
   responseXML: null
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值