Vue项目 使用new Blob() 对返回文件流下载导出文件时封装调用示例(即文件流转Blob格式实现下载)

一、需求

1、后台管理系统,对于一些上传的图片以及多种格式的文件,要实现下载功能

二、使用方式

1、举个例子,我们项目中目前是将文件都上传到oss

三、实现方式

1、在src/utils下新建download.js(代码如下)

import axios from 'axios'
import {Loading, Message} from 'element-ui'
import { saveAs } from 'file-saver'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { blobValidate } from "@/utils/blob.js";   //引入blob的校验
import Vue from "vue";

2、配置开发环境url,直接引入

const baseURL = process.env.VUE_APP_BASE_API
let downloadLoadingInstance;

3、具体实现方法

export default {
  oss(ossId) {
    // debugger
    var url = baseURL + '/system/oss/download/' + ossId   // 可以实现批量下载,传入id
    downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
    axios({
      method: 'get',
      url: url,
      responseType: 'blob',
      headers: { 'Authorization': 'Bearer ' + getToken() }
    }).then(async (res) => {
      const isLogin = await blobValidate(res.data);
      if (isLogin) {
        const blob = new Blob([res.data], { type: 'application/octet-stream' })
        this.saveAs(blob, decodeURI(res.headers['download-filename']))
      } else {
        this.printErrMsg(res.data);
      }
      downloadLoadingInstance.close();
    }).catch((r) => {
      console.error(r,r.stack)
      Message.error('下载文件出现错误,请联系管理员!')
      downloadLoadingInstance.close();
    })
  },
}

验证是否为blob格式,@/utils/blob.js

export async function blobValidate(data) {
  try {
    const text = await data.text();
    JSON.parse(text);
    return false;
  } catch (error) {
    return true;
  }
}

4、index.vue页面使用方式

<el-button type="primary"@click="handleDownload">点击下载</el-button>
methods: {
	handleDownload(){
	// 首先将download.js在main.js全局注册之后,Vue.prototype.$download = download 可以这样写
		this.$download.oss('1580751947651215362')  
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值