导出后台返回的excel文件流

概述: 大部分情况下,我们是直接访问提供的download链接来直接下载文件。但某些时候,为了保证信息安全,可能需要提交token来验证用户信息。

参考:js要怎么接收后端传的excel文件流?jello chen的回答

jello chen的回答中,提供了两种方法。

第一种是通过的a标签直接下载:

  <a href="<你的返回流的Action路径>" >下载</a>

转化为js代码:

      let elink = document.createElement('a');
      elink.download = "download.xls";
      elink.href = `${url}?token=${token}&${hash}`;
      elink.click();

第二种方法是通过XMLHttpRequest来实现的,代码如下(有部分修改):

    <script type="text/javascript">
        function download(filename) {
            let oReq = new XMLHttpRequest();
            oReq.open("GET", "<你的返回流的Action路径>", true);
            oReq.responseType = "blob";

            //  设置验证密匙
            oReq.setRequestHeader("token",token);
            oReq.setRequestHeader("loginName",localStorage.getItem('username') || '');

            oReq.onload = function () {
                var content = oReq.response;
                var blob = new Blob([content]);

                //  创建a标签,下载处理过的文件流
                var elink = document.createElement('a');
                elink.download = filename;
                elink.href = URL.createObjectURL(blob);
                elink.click();
            };
            oReq.send();
        }
    </script>

然后将起转化为fetch方式:

  let newOptions = {
      loginName: localStorage.getItem('username') || '',
      'Content-Type': 'application/form-data; charset=utf-8',
      token,
  }

  fetch("<你的返回流的Action路径>", newOptions, { responseType: 'blob'})
  .then(response => {
      // 注意,该处并非response.json()
      return response.blob();
  })
  .then(res => {
      var blob = new Blob([res]);
      let elink = document.createElement('a');

      elink.download = "download.xls";
      elink.href = URL.createObjectURL(blob);
      elink.click();
  })
  .catch(e => {
    console.log('error:' + e)
  })

因为没有post方式的接口,所以没有测试post的请求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容