Vue中axios实现文件流下载

8 篇文章 0 订阅
5 篇文章 0 订阅

Vue中axios实现文件流下载

前言

后端以文件流的形式返回数据,前端多选数据导出excel文件

🔖以文件流返回

		String fileName = "PersonalCertInfo";
		OutputStream out =null;
		try {
			out = response.getOutputStream();
			response.reset();
			response.addHeader("Access-Control-Allow-Origin", "*");
			response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
			response.addHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
			response.setContentType("application/vnd.ms-excel;charset=utf-8");
			workbook.write(out);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			out.flush();
			out.close();
		}

🔖 axios请求封装

   request(data) {
        let reqData = data.data || {};
        //支持表达式作为域名解析
        data.url =this.parseUrl(data.url);
        //统一拼接域名接口
        if (data.url.indexOf('http') == -1) {
            data.url = domainName + data.url;
        }
        let requestData = {
            url: data.url,
            data: reqData,
            method: data.method || 'GET',
            params: data.params || {},
            onUploadProgress: data.onUploadProgress || null,
            headers: data.headers || '',
            responseType: data.responseType || 'json'
        };
        return axios(requestData);
    },
    // 文件导出
    export(url, data){
        return this.request({ url, data, method: "POST" ,responseType:"blob"});
    }

定义Api接口

  exportCmPersonalCertAndAttach(data, cb) {
    req.export(hse + `/sim/cmPersonalCert/v1/export`, data).then(req => {
      cb(req);
    });
  }

Vuex封装

exportCmPersonalCertAndAttach({ commit, state }, data) {
    return new Promise((resolve, reject) => {
      card.exportCmPersonalCertAndAttach(data, response => {
  resolve(response);
      });
   });
  }
调用导出excel文件函数
handleExport() {
      if (this.multipleSelection) {
        this.$store
          .dispatch(
            "card/exportCmPersonalCertAndAttach",
            this.multipleSelection
          )
          .then((response) => {
            let blob = new Blob([response.data]);
            let downloadElement = document.createElement("a");
            let href = window.URL.createObjectURL(blob); //创建下载的链接
            downloadElement.href = href;
            downloadElement.download = `个人证件信息表.xlsx`; //下载后文件名
            document.body.appendChild(downloadElement);
            downloadElement.click(); //点击下载
            document.body.removeChild(downloadElement); //下载完成移除元素
            window.URL.revokeObjectURL(href); //释放掉blob对象
            this.$message.success(`导出成功`);
          })
          .catch(e => {
            this.$message.error(`error${e}`);
          });
      }

数据展示
列表
点击导出,弹出另存为文件
另存为
导出效果
导出效果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DuebassLei

请我吃颗棒棒糖吧~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值