zoukankan      html  css  js  c++  java
  • vue前端调后台接口下载excel文件

    后台提供下载接口,可传参数

    使用get方法

    • window.location.href = '/api/xxx/xxx?params'
      
    • window.open('/api/xxx/xxx?params')
      
    • <a href="/api/xxx/xxx?params" download="excel.xls">export</a>
      
    get方法参数拼接
    • // 拆分数据
      splitData: function (data) {
          let url = ''
          for (let k in data) {
              if (data.hasOwnProperty(k)) {
                  let value = data[k] || ''
                  url = url + '&' + k + '=' + encodeURIComponent(value)
              }
          }
          return url ? url.substring(1) : ''
      },
      
      // 拼接参数
      contractUrl: function (url, data) {
          return url + (url.indexOf('?') < 0 ? '?' : '&') + this.splitData(data)
      },
      

    使用post方法

    直接调用接口是返回表格流文件格式的,可以使用 Blob 对象指定要读取的文件或数据,然后创建a标签下载。

    • /**
       *  导出excel文件
       * @param url 下载地址
       * @param data 下载参数
       * @param name 下载文件名
       */
      export const $export = (url, data, name) => {
          let opt = {
              url: url,
              method: 'post',
              responseType: 'blob',
              data: data
          }
          axios.request(opt).then(res => {
          	// Blob 对象表示一个不可变、原始数据的类文件对象(File 接口都是基于Blob)
              const BLOB = res.data
              // FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件的内容
              const fileReader = new FileReader()
              // 开始读取指定的Blob中的内容。读取完成result属性中将包含一个data: URL格式的Base64字符串以表示所读取文件的内容
              fileReader.readAsDataURL(BLOB)
              // 处理load事件,该事件在读取操作完成时触发
              fileReader.onload = (event) => {
                  let a = document.createElement('a')
                  a.download = `${name}.xls`
                  a.href = event.target.result
                  document.body.appendChild(a)
                  a.click()
                  document.body.removeChild(a)
              }
          })
      }
      
  • 相关阅读:
    随笔为什么还要想标题
    [GXYCTF2019]BabySQli
    [CISCN2019 华北赛区 Day2 Web1]Hack World
    20年美亚杯个人赛-ALICE_USB部分WRITE UP
    20年美亚杯个人赛-Alice LG Phone部分WRITE UP
    20年美亚杯个人赛-Alice_Laptop部分WRITE UP
    20年美亚杯WRITE UP
    18年美亚杯团体赛-C部分 WRITE UP
    v&n赛 ML 第一步(python解决)
    CTFHub web技能树 RCE
  • 原文地址:https://www.cnblogs.com/codebook/p/12375358.html
Copyright © 2011-2022 走看看