跨域情况下,vue如何下载后台接口提供的application/octet-stream文件流Excel文件

前言

由于跨域,所以无法直接通过window.location.href或者a标签直接下载,直接拼后台接口地址又暴露了后台地址,不可行。

所以在这种跨域情况下,本章讲一下vue如何下载后台接口提供的application/octet-stream文件流Excel文件。

功能

实现前端vue下载后台返回的application/octet-stream文件流

1、使用blob类型请求

2、获取到数据后处理成Blob数据

3、通过创建一个a标签,将Blob数据转换成base64数据,放到a标签的url中

4、触发a标签点击事件实现下载Blob数据

5、删除a标签

代码实现

javascript 复制代码
/**
 * 导出excel
 * @param fileName
 * @returns {AxiosPromise}
 */
export function exportExcel(fileName){
  request({
    url: '/xxx/getCameraXls?fileName='+fileName,
    method: 'get',
    responseType:'blob'
  }).then(res=>{
    const date = new Date(+new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/\-/g, '').replace(/\:/g, '').replace(/\s*/g, '')
    const downloadName = fileName +'-'+ date + '.xlsx'
    downloadFunc(downloadName,res)
  })
}

function downloadFunc(fileName,data){
  const blob = new Blob([data], { type: `'application/vnd.ms-excel';charset=utf-8` })
  const downloadElement = document.createElement('a')
  const href = window.URL.createObjectURL(blob)
  downloadElement.href = href
  downloadElement.download = fileName
  document.body.appendChild(downloadElement)
  downloadElement.click()
  document.body.removeChild(downloadElement)
  window.URL.revokeObjectURL(href)
}
相关推荐
只愿云淡风清7 分钟前
ECharts地图数据压缩-ZigZag算法
前端·javascript·echarts
亿元程序员15 分钟前
都2025年了,还有面试问A*寻路的???
前端
Moment15 分钟前
Node.js v25.0.0 发布——性能、Web 标准与安全性全面升级 🚀🚀🚀
前端·javascript·后端
全职计算机毕业设计18 分钟前
基于微信小程序的运动康复中心预约系统的设计与实现(SpringBoot+Vue+Uniapp)
vue.js·spring boot·微信小程序
杨超越luckly20 分钟前
HTML应用指南:利用POST请求获取中国一汽红旗门店位置信息
前端·arcgis·html·数据可视化·门店数据
专注前端30年24 分钟前
【JavaScript】every 方法的详解与实战
开发语言·前端·javascript
速易达网络27 分钟前
Java Web登录系统实现(不使用开发工具)
java·开发语言·前端
IT_陈寒29 分钟前
Vite 3.0 性能优化实战:5个技巧让你的构建速度提升200% 🚀
前端·人工智能·后端
金士顿32 分钟前
EC-Engineer SDK 核心 API 使用指南
前端