美文网首页
下载接口返回的数据流格式文件

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

作者: 空格x | 来源:发表于2022-05-21 17:26 被阅读0次
  • 如果下载文件的接口返回一个文件流,直接使用a标签的download属性是下载不了的,,因为通常后端返回给我们的数据格式是json,其实除此之外,还有其他的格式如:arraybufferblob等,接口返回文件流时,一般采取arraybufferblob这两个格式

1.首先定义好请求跟解析文件流

1.1接口请求
// 模板下载
import request from "@/resources/request.js"


export function downloadExcel () {
  return request({
    method: "GET",
    url: "接口请求地址",    
  })
}
1.2定义下载文件流方法
// 下载文件流
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);

    // 创建a标签
    const ele = document.createElement("a");
    ele.style.display = "none";

    // 设置href属性为文件路径,download属性可以设置文件名称
    ele.href = url;
    // 将a标签添加到页面并模拟点击
    document.querySelectorAll("body")[0].appendChild(ele);
    ele.click();

    // 移除a标签
    ele.remove();
}
  • 此时文件确实下载成功了,但你会发现文件里的内容没有,只是下载了个空的文件回来,此时需要指定下指定响应的数据类型,防止出现解析错误
1.3修改接口请求(指定响应数据类型)
import request from "@/resources/request.js"

// 模板下载
export function downloadExcel () {
  return request({
    method: "GET",
    url: "接口请求地址",
    responseType: "blob",
    // responseType: "arraybuffer"
  })
}
  • 如果想Blob文件对象转化为其他格式的数据,可借助FileReader对象的API进行操作
FileReader.readAsText(Blob) // 将Blob转化为文本字符串;
FileReader.readAsArrayBuffer(Blob): // 将Blob转为ArrayBuffer格式数据
FileReader.readAsDataURL() // 将Blob转化为Base64格式的Data URL

相关文章

网友评论

      本文标题:下载接口返回的数据流格式文件

      本文链接:https://www.haomeiwen.com/subject/meicprtx.html