Vue项目,后端返回文件流或二进制,前端导出文件

后端返回的文件流格式
后端返回的文件流格式
axios返回拦截 request.js

// 响应拦截器
service.interceptors.response.use(
  // 如果您想获得http信息,如头或状态请返回响应=>响应
  // 通过自定义代码确定请求状态,这里只是一个例子,您也可以通过HTTP状态码来判断状态
  response => {
    // 导出excel
    const headers = response.headers
    if (headers['content-type'] === 'application/octet-stream') {
      return response
    }
    const res = response.data
    if (res.code !== 200 || !res.success) {
      Message({
        message: res.msg || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
      // 50008:非法令牌;50012:其他客户端登录;401:令牌过期;
      if (res.code === 401) {
        MessageBox.confirm('已注销,您可以取消停留在此页面,或重新登录', 'Confirm logout', {
          confirmButtonText: 'Re-Login',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
    } else {
      return res
    }
  },

api.js

import request from '@/utils/request'
// 导出excel到流
export function OrderExportExcelToStream(data) {
  return request({
    url: '/api/Order/OrderExportExcelToStream',
    method: 'post',
    data,
    responseType: 'blob',
    headers: {
      'Content-Type': 'application/json'
    },
  })
}

页面调用 index.vue

import { OrderExportExcelToStream } from '@/api/packet'

    //导出Excel
    entOrderExportExcel() {
      const newArr = JSON.parse(JSON.stringify(this.options))
      newArr.forEach((element, index) => {
        element.orderExportExcelFieldList = element.checkedCities
      })
      const data = {
        trackNoList: this.trackNoList,
        orderExportExcelFieldGroupList: newArr
      }
      OrderExportExcelToStream(data).then(res => {
        console.log(res);
        //创建一个隐藏的a连接,
        const link = document.createElement('a');
        let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'});
        link.style.display = 'none';
        //设置连接
        link.href = URL.createObjectURL(blob);
        link.download = '订单信息'; 
        document.body.appendChild(link);
        //模拟点击事件
        link.click();
      })
    },

后端返回base64格式
在这里插入图片描述

// base64文件导出
/*
  data:文件base64
  type:文件类型
  fileName:文件名
*/
export function fileBase64Export(data, type, fileName) {
  let url = 'data:application/' + type + ';base64,' + data
  // 创建a标签
  const link = document.createElement('a')
  // 设置隐藏
  link.style.display = 'none'
  //设置链接
  link.href = url
  // 设置下载的文件名
  link.download = fileName
  // 将a标签插入到页面中
  document.body.appendChild(link)
  //模拟点击事件
  link.click()
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值