使用文件流进行文件下载

1,281 阅读1分钟
  res = JSON.parse(res);
  let name = res.fileName.slice(0,res.fileName.lastIndexOf("."));
  let hz = res.fileName.slice(res.fileName.lastIndexOf("."),res.fileName.length);
  let type,fileType;
  if(hz == "doc"){
    fileType="application/msword;charset=UTF-8";
  }else if(hz=="bin"||hz=="so"||hz=="dll"||hz=="exe"){
    fileType="application/octet-stream;charset=UTF-8";
  }else if(hz == "pdf"){
    fileType="application/pdf;charset=UTF-8";
  }else if(hz == "ai"){
    fileType="application/postscript;charset=UTF-8";
  }else if(hz == "txt"){
    fileType="text/plain;charset=UTF-8";
  }else if(hz == 'zip'){
    fileType="application/zip;charset=UTF-8";
  }else if(hz == 'rar'){
    fileType="application/rar;charset=UTF-8";
  }else if(hz == 'xls'){
    fileType="application/vnd.ms-excel;charset=UTF-8";
  }else if(hz == 'ppt'){
    fileType="application/vnd.ms-powerpoint;charset=UTF-8";
  }else if(hz == 'dir'){
    fileType="application/x-director;charset=UTF-8";
  }else if(hz == 'js'){
    fileType="application/x-javascript;charset=UTF-8";
  }else if(hz == 'swf'){
    fileType="application/x-shockwave-flash;charset=UTF-8";
  }else if(hz == 'xhtml' || hz == 'xht'){
    fileType="application/xhtml+xml;charset=UTF-8";
  }else if(hz == 'mid' || hz == 'midi'){
    fileType="audio/midi;charset=UTF-8";
  }else if(hz == 'mp3'){
    fileType="audio/mpeg;charset=UTF-8";
  }else if(hz == 'rm'){
    fileType="audio/x-pn-realaudio;charset=UTF-8";
  }else if(hz == 'rpm'){
    fileType="audio/x-pn-realaudio-plugin;charset=UTF-8";
  }else if(hz == 'wav'){
    fileType="audio/x-wav;charset=UTF-8";
  }else if(hz == 'bmp'){
    fileType="image/bmp;charset=UTF-8";
  }else if(hz == 'gif'){
    fileType="image/gif;charset=UTF-8";
  }else if(hz == 'jpeg' || hz == 'jpg'){
    fileType="image/jpeg;charset=UTF-8";
  }else if(hz == 'png'){
    fileType="image/png;charset=UTF-8";
  }else if(hz == 'css'){
    fileType="text/css;charset=UTF-8";
  }else if(hz == 'html' || hz == 'htm'){
    fileType="text/html;charset=UTF-8";
  }else if(hz == 'xsl' || hz == 'xml'){
    fileType="text/xml;charset=UTF-8";
  }else if(hz == 'mpeg' || hz == 'mpg'){
    fileType="video/mpeg;charset=UTF-8";
  }else if(hz == 'avi'){
    fileType="video/x-msvideo;charset=UTF-8";
  }else if(hz == 'movie'){
    fileType="video/x-sgi-movie;charset=UTF-8";
  };

  axios({
    method:'get',
    url:res.url,//请求文件流地址
    headers: {
      'Content-Type': 'application/json;charset=utf-8',//设置请求头请求格式为JSON
    },
    params:{
      responseType:'blob',//指定返回类型
    }
  }).then(res=>{
    if(res.data){
      const blob = new Blob([res.data],{type:fileType});
      const downloadurl = window.URL.createObjectURL(blob);
      let anchor = document.createElement("a");
      anchor.href = downloadurl;
      anchor.download = name + hz;
      anchor.click();
      window.URL.revokeObjectURL(blob);
    }
  });