下载后端Post接口返回的文件流

995 阅读1分钟

最近开发一个下载功能,因为传参比较多,请求接口使用了post的方式。post方式接口返回的是文件流,需要对返回的文件流转化成URL来使用。

使用Blob转换文件流

Blob是一个类文件对象,它可以创建一个url

使用Blob时,在请求后端接口时需要设置responseType的值为'blob'

let data = res // 后端返回数据
let blob = new Blog([data]) // 创建Blob对象
if('download' in document.createElement('a')) { // 非IE下载    
  // 创建隐藏下载超链接   
  const alink = document.createElement('a')   
  // 使用超链接的download属性下载文件   
  alink.download = '下载文件'   
  // 下载的文件名  
  alink.style.display = 'none'   
  // 使用Blob创建一个指向类型化数组的URL   
  alink.href = URL.createObjectURL(blob)   
  document.body.appendChild(alink)   
  // 点击超链接   
  alink.click()   
  // 释放URL对象  
  URL.revokeObjectURL(alink.href)   
  document.body.removeChild(alink)        
}else{ //IE10+下载   
  navigator.msSaveBlob(blob, filename)        
}