JS下载或导出文件的三种方法

这篇博客介绍了三种不同的前端文件下载方法:使用axios通过POST请求下载,利用form表单触发下载,以及直接通过a标签创建链接下载。示例代码详细展示了每种方法的实现过程,适用于不同场景的文件导出需求。
摘要由CSDN通过智能技术生成

方案1使用axios请求后端接口

// 假设在一个列表里面选中行,单个或多个,选中
handleEmplabelExport (selectRow) {
  let employeeIds = selectRow.map(item => item.employeeId)
  let params = {
    employeeIds: employeeIds || null,
    ...this.searchForm
 }
  /* 下载方案1 */
  axios({
    method: 'post',
    url: '/emp/employee/export/empLabel', // 请求地址
    data: params, // 参数
    responseType: 'blob'
  }).then(res => {
    // let newName = name
    // 处理返回的文件流
    const content = res.data
    const blob = new Blob([content], { type: 'application/octet-stream;charset=ISO8859-1' })
    console.log(res.headers)
    const fileName = decodeURIComponent((res.headers['content-disposition']).split('filename=')[1])
    // const fileName = newName
    if ('download' in document.createElement('a')) {
      // 非IE下载
      const elink = document.createElement('a')
      elink.download = fileName
      elink.style.display = 'none'
      elink.href = URL.createObjectURL(blob)
      document.body.appendChild(elink)
      elink.click()
      URL.revokeObjectURL(elink.href) // 释放URL 对象
      document.body.removeChild(elink)
    } else {
      // IE10+下载
      navigator.msSaveBlob(blob, fileName)
    }
  })
}

方法2,使用form表单下载

  /* 下载方案2 */
  let form = document.createElement('form')
  form.style.display = 'none'
  form.action = '/backend/emp/employee/export/empLabel'
  form.method = 'post'
  document.body.appendChild(form)
  for (let key in params) {
    let input = document.createElement('input')
    input.type = 'hidden'
    input.name = key
    input.value = params[key]
    form.appendChild(input)
  }
  form.submit()
  form.remove()

方法3,直接用a标签导出

/* 下载方案3 */

  if (selectRow.length === 0) {
     this.$message.error('请选择员工再导出员工标签')
     return false
   }
   let employeeIds = selectRow.map(item => item.employeeId).join(',')
   const el = document.createElement('a')
   document.body.appendChild(el)
   el.href = `/backend/emp/employee/export/empLabel/${employeeIds}/excelZip`
   el.click()
   document.body.removeChild(el)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值