跨域情况下,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)
}
相关推荐
Mahut3 分钟前
我们是怎么用 TanStack 全家桶的
前端·javascript·架构
FreeBuf_8 分钟前
Claude浏览器扩展漏洞允许通过任意网站实现零点击XSS提示注入
前端·网络·xss
AlunYegeer9 分钟前
【JAVA】网关的管理原理和微服务的Interceptor区分
java·服务器·前端
sensen_kiss13 分钟前
CAN302 电子商务技术 Pt.2 深入了解HTML和CSS
前端·css·学习·html
说实话起个名字真难啊23 分钟前
前端JS审计:渗透测试的“破局之钥”
开发语言·前端·javascript·测试工具
吴声子夜歌23 分钟前
TypeScript——编译器和编译选项
前端·javascript·typescript
herogus丶31 分钟前
【Chrome插件】页面自动化助手使用介绍
前端·chrome·自动化
Traced back36 分钟前
[特殊字符] Vue3 常用指令大全
前端·javascript·vue.js
Highcharts.js39 分钟前
在React中使用图表库时,优先选择组件化方案可以降低开发复杂度
前端·javascript·react.js·数据可视化·highcharts
西洼工作室40 分钟前
React城市选择模块功能实现
前端·react.js·前端框架