前端实现导出

前端实现导出的有两种实现方式
1、通过前端重定向,使用浏览器自身导出功能。直接使用后台的链接。通过window.localton.href实现文件的导出。

2、通过Blob文件流的形式通过,接口请求实现文件的导出。

重点说一下第二种的代码实现方式

首先,在封装的请求接口中,要谨记添加responseType:'blob'.

export const getExportFile = (url.params)=>{
 return axios({
    url:url,
    data:params,
    methds: 'post,
    responseType:'blob',
    headers:{
        "Content-Type":"application/json;charset=utf-8",
    }
 })
}

封装导出代码:

/**
* url 请求路径
* fileName 文件名称(需要后缀)
* params  参数
*/


export const handleFile=(url,fileName,params)=>{
  return getExportFile(url,params).then(res)=>{
  if(res.size==0){
    Vue.prototype['$message'].warning('数据为空,请重新筛选数据')
    return 
  }
   // type的格式可以可以设置,可以把appcation/json设置进去,然后设置导出的类型
   const blob = new Blob([res],{ type:'charset=utf-8' }) 
   // 兼容ie和360浏览器
  if(window.navigator && window.navigator.msSaveOrOpenBlob){
   //  fileName需要指定后缀类型例:.doc
    window.navigator.msSaveOrOpenBlob(blob, fileName)
  }else{
   let url = window.URL.createObjectURL(blob)
   const link = document.createElement('a')
   link.style.display = 'none'
   link.href = url
   a.setAttribute('download',fileName)
   document.body.appendChild(link)
   link.click()
   document.body.removeChild(link)   // 删除节点
   window.URL.revekeObjectURL(url)  // 释放blob对象 
  }
 }
}

最后通过调用handleFile,传递url、fileNme、params 需要的参数就可以导出文件

import { handleFile } from 'XXX'

handleFile('XXXX','XXX.doc',params)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值