下载接口返回的数据流格式文件

使用插件 downloadjs

  • 下载插件
npm install downloadjs
  • 引用
import download from 'downloadjs';
download(data, filename, mimeType);
// data 是要下载的文件内容,可以是 Blob、Buffer、ArrayBuffer、URL、字符串等;
// filename 是要保存的文件名;
// mimeType 是文件的 MIME 类型,可选。-- 如果不写则自动识别

使用a链接跳转方式

虽然是打开新窗口的形式,但指向过去后,浏览器会自动解析下载,并自动关闭这个新窗口
注: 只支持GET方式的请求 (因为GET请求不受同源策略的影响与限制 )

  • 封装公共方法
// url 为接口地址
export const openWindow = (url) => {
    const aTag = document.createElement('a')
    // 直接将a链接指向完整的接口请求地址,
    aTag.href = `${'接口请求地址'}${url}`
    aTag.setAttribute('download', '自定义的文件名')
    aTag.target = '_blank'
    aTag.click()
}

// 以下是接口举例 // 后面会用到
export function exce(params) {
  return request({
    method: "GET",
    url: "接口地址",
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    }
  });
}
export const excels = "接口地址"
  • 项目中使用
import { downloadFile } from "@/utils/index";
import { excels } from "@/api/index";
methods:{
  openWindow(`${excels }`)
}

解析文件流方式下载文件

  • 定义接口请求
// 模板下载
import request from "@/resources/request.js"
export function downloadExcel () {
  return request({
    method: "GET",
    url: "接口请求地址", 
    responseType: "blob"   //指定响应数据类型
  })
}

如果想Blob文件对象转化为其他格式的数据,可借助FileReader对象的API进行操作

readAsText(Blob, encoding): 将Blob对象转换为文本数据。可以指定可选的编码方式。
readAsDataURL(Blob): 将Blob对象转换为DataURL格式的字符串,可以用于显示图片或创建下载链接。
readAsArrayBuffer(Blob): 将Blob对象转换为ArrayBuffer格式的数据,适用于处理二进制数据。
readAsBinaryString(Blob): 将Blob对象转换为二进制字符串。
  • 定义下载文件流
// 下载文件流
export const downloadFile = (res) => {
    const blob = new Blob([res], {
       type:
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
      "application/vnd.ms-excel",
  }) // 此处指定了只适用于 .xlsx xls 文件,可自行调整想要适配的文件或不指定

    // 通过URL.createObjectURL生成文件路径
    const url = window.URL.createObjectURL(blob);
   // 获取文件名称
   var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
   let contentDisposition = decodeURI(res.headers['content-disposition'])
   let result = patt.exec(contentDisposition)
   let fileName = result[1]
  fileName = fileName.replace(/\"/g, '')
    // 创建a标签
    const ele = document.createElement("a");
    // 设置href属性为文件路径,download属性可以设置文件名称
   ele.setAttribute('download', fileName)
    ele.download = '文件'// 下载文件的文件名
    // 设置href属性为文件路径,download属性可以设置文件名称
    ele.href = url;
    // 将a标签添加到页面并模拟点击
    document.querySelectorAll("body")[0].appendChild(ele);
    ele.click();

    // 移除a标签
    ele.remove();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值