vue 调用接口下载java后端生成的excel文件流

vue 调用接口下载java后端生成的excel文件流

需求是点击导出(下载)excel文件
分析: 下载可借用a标签的下载功能,将后端返回的文件流处理后,动态生成a标签模拟点击操作完成下载操作

首先创建axios请求

import axios from 'axios';

const excel = axios.create({
  timeout: 50000, // 请求超时时间
  withCredentials: true //跨域处理
})
在请求拦截器里配置token等参数,设置responseType 为‘blob’
excel.interceptors.request.use(config => {
const token = sessionStorage.getItem('token');
  if (token) {
    config.headers.Authorization = 'xxxx' + token // 让每个请求携带自定义 token 请根据实际情况自行修改
  }
  config.responseType = 'blob'
  return config
}, err)

在api文件中定义接口请求

import excel from './excelApi'
// 假设接口地址为 excel/exportExcel
export const exportExcel = (params) => {
    return excel.post(baseUrl + `excel/exportExcel`, params)  
};

对应的组件引入接口文件调用

import { exportExcel } from "@/api/api";

exportExcel() {
      let param = {
        params: {
          // 请求条件
        },
      };
      exportExcel(param).then( res => {
        if (res.data.type) {
          const blob = new Blob([res.data], {
            type: "application/vnd.ms-excel"
          });
          let link = document.createElement('a');
          link.style.display = 'none'
          link.href = URL.createObjectURL(blob);
          link.setAttribute('download', '导出excel文件.xlsx');
          link.click();
          link = null;
          this.$message.success('导出成功');
        } else {
          this.$message.warning(res.data.msg);
        }
      })
      .catch(err => {
        this.$message.error("下载失败");
      })
    },

在这里插入图片描述
在这里插入图片描述
完事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值