如何请求返回文件流的接口

982 阅读1分钟
1.关于axios 的responseType类型的设置
数据类型
""DOMSting(默认类型)
arraybufferArrayBuffer对象
blobBlob对象
documentDocument对象
jsonJavaScript Object,parsed from a JSON string returned by the server
textDOMSting

axios请求下载导出一个文件,请求成功时返回的是一个流形式的文件,需要设置responseType: 'arraybuffer',但是请求失败的需要返回的是json数据,所以需要把arraybuffer转成Json对象。

2.arraybuffer转成Json对象
var enc = new TextDecoder('utf-8')
var resp = JSON.parse(enc.decode(new Uint8Array(res.data))) //转化成json对象
3.Blob进行文件流的转化
var b = new Blob([res.data], {
    type: "application/zip",
  });
  // 根据传入的参数b创建一个指向该参数对象的URL
  var url = URL.createObjectURL(b);
  var link = document.createElement("a");
  
  // 导出的文件名--后端放在头部了
  let fileName = decodeURIComponent(
    res.headers["content-disposition"].split("=")[1]
  );
  link.download = fileName;
  link.href = url;
  link.click();