React,导出Excel表格的方法

前端点击按钮导出Excel表,以下方法,前提是让后端返回的文件流可以直接请求下载。

意思就是:你通过在浏览器请求接口,传参就可以直接下载文件。

方法一:

window.open('请求地址')

适用于get请求,需要传参的话,直接在地址后面拼接参数即可

此方法的缺点:逻辑是重新打开一个新的页面发请求,因此请求时间较长时会出现空白页。

方法二:

const link = document.createElement("a");
link.href='请求地址';
link.download='文件名.xlsx';
link.click();//点击事件

适用于get请求,需要传参的话,直接在地址后面拼接参数即可

该方法逻辑是用a标签发送请求。在当前页面发送请求,不会出现空白页。

方法三:

     const data = {
           name:'张三'
           };//请求参数写这里面
      var oReq = new XMLHttpRequest();
      oReq.open("POST", '请求地址', true);
      oReq.responseType = "blob";
      oReq.setRequestHeader("Content-Type", "application/json");
      oReq.send(JSON.stringify(data))
      oReq.onload = function (oEvent) {
        var content = oReq.response;
        var elink = document.createElement('a');
        elink.download = '文件名.xlsx'
        elink.style.display = 'none';
        var blob = new Blob([content]);
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        document.body.removeChild(elink);

此方法是用原生ajax发送请求。

需要注意,请求头的配置。如果项目是用的存储在cookie里面的值去验证用户身份的话,建议不要用这个方法,因为我试了行不通。但是用的localStorage或者sessionStorage存储token验证身份就可以。

本人试了多次,不能用封装好的ajax发请求,猜想大概原因是封装好了的ajax响应拦截器那里会做一些操作,所以不能正常请求下载文件。以上方法就是为了不通过响应拦截器实现获取后端返回的文件流。不知道响应拦截器那里应该怎么配置让文件通过,顺利下载。如果您有想法,请在评论区指导一下,谢谢。

猜你喜欢

转载自blog.csdn.net/Gunba1/article/details/128419110