vue下载某个文件 axios方式下载 a方式标签下载

875 阅读1分钟

当下载通过请求一个地址下载某个文件的时候,我一般使用的是a标签直接写上href直接写上链接进行跳转下载

    <a href="xxxx" target="_blank"></a>
    <!-- 这种方式直接跳转下载 -->
  • 这种方式的优势 简单,快速
  • 缺点 只能get方式进行获取,不可以传递data以及自定义headers信息

如果需要利用post请求并且需要验证登录才可下载,就可以用到axios的这种方式进行下载。

axios({
    method: 'post',
    url: `${baseImgUrl}/sg-project-info/exportProjectSummary`,
    responseType: 'blob',
    data: {
      year: '',
      deptId: '',
    },
  }).then((response) => {
  //有时候用response.data,有时候直接用response,这里最好console一下看是不是blob格式数据
    var fileURL = window.URL.createObjectURL(new Blob([response.data]));
    var fileLink = document.createElement('a');

    fileLink.href = fileURL;
    fileLink.setAttribute('download', 'file.pdf');
    document.body.appendChild(fileLink);
    fileLink.click();
    document.body.removeChild(fileLink);
    window.URL.revokeObjectURL(fileURL);
  });
  • 这种方式的优势:可以post方式请求,可以携带headers信息

遇到的问题

  • 当我封装了axios之后,利用vite的proxy代理进行请求就一直报403错误。不知道什么原因,只能用原生的axios写完整baseURL请求。。反正是解决了、、