VUE 将后端返回的二进制流前端进行处理实现下载文件(复制可直接使用)

该代码示例展示了如何在Vue.js应用中使用axios库和element-ui组件导出Excel文件。它包括一个exportExcel函数,该函数处理请求,设置headers,处理返回的blob数据并触发文件下载。此外,文章还提到了如何在需要的地方引入和使用这个导出功能。
摘要由CSDN通过智能技术生成

1.创建excel.js

import { getTokenAUTH } from "./auth";
import axios from "axios";
import { Loading, Message } from "element-ui";

//导出接口
export const urls = {
  exportProjectTaskExcel: process.env.VUE_APP_EXCEL, //任务列表导出
};
/**
 * 公共导出方法
 * @param url
 * @param options
 * @returns {Promise}
 */
export function exportExcel(url, options = {}, method) {
  let loading = Loading.service({
    target: "#ark-per-table",
    text: "正在导出数据,请稍后...",
    background: "rgba(0, 0, 0, 0.1)",
  });

  return new Promise((resolve, reject) => {
    //获取登录的token
    if (getTokenAUTH()) {
      axios.defaults.headers["authorization"] = getTokenAUTH();
    }
    //规定内容类型
    axios.defaults.headers["content-type"] = "application/json;charset=UTF-8";

    axios({
      method: method ? method : "post", //判断请求方法
      url: url, // 请求地址
      data: options, // 参数
      responseType: "blob", // 表明返回服务器返回的数据类型
    })
      .then((res) => {
        loading.close();
        const link = document.createElement("a");
        // let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'});    //如果后台返回的不是blob对象类型,先定义成blob对象格式
        let blob = res.data; //如果后台返回的直接是blob对象类型,直接获取数据
        let fileName = res.headers["content-disposition"].split("=")[1]; //拆解获取文件名(这个要根据后台返回来拆解)
        link.style.display = "none";

        // 兼容不同浏览器的URL对象
        const url = window.URL || window.webkitURL || window.moxURL;
        link.href = url.createObjectURL(blob);
        link.download = decodeURI(fileName); //下载的文件名称
        link.click();
        window.URL.revokeObjectURL(url); //  #URL.revokeObjectURL()方法会释放一个通过URL.createObjectURL()创建的对象URL. 当你要已经用过了这个对象URL,然后要让浏览器知道这个URL已经不再需要指向对应的文件的时候,就需要调用这个方法.
      })
      .catch((error) => {
        console.log(error);
        Message({
          message: "导出错误!",
          type: "error",
          duration: 5 * 1000,
        });
      });
    console.log(resolve); //严格模式下需要
    console.log(reject); //严格模式下需要
  });
}

2.引入创建的exceljs   

import { urls, exportExcel } from "@/api/excel.js"; 

3.在需要使用的位置使用引入的JS里面的方法

   exportExcel(urls.exportProjectTaskExcel, { projectTaskIds }).then(() => {
        this.$message({ message: "导出成功!", type: "success" });
      });

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值