React实现导出功能


1、React导出excel功能
<Button colors="primary" onClick={_this.export}>
   导出
</Button>
export=()=>{
        let searchObj = {searchMap:{}};
        let {searchMap} = searchObj;//查询条件
        let downUrl = `api/export`
        exportFile(downUrl,{searchMap})
}
1> 使用Blob对象,从服务器接收到的文件流创建了一个blob对象,并使用该blob创建一个指向类型数组的URL,将该url作为a标签的链接目标,
然后去触发a标签的点击事件从而实现表格下载导出函数代码如下
function exportFile(url, data) {
    axios({
        method: 'post',
        url: url,
        data: data,
        responseType: 'blob'
    }).then((res) => {
        const content = res.data;
        const blob = new Blob([content]);
        const fileName = "导出数据.xls";
        const selfURL = window[window.webkitURL ? 'webkitURL' : 'URL'];
        let elink = document.createElement('a');
        if ('download' in elink) {
            elink.download = fileName;
            elink.style.display = 'none';
            elink.href = selfURL['createObjectURL'](blob);
            document.body.appendChild(elink);

            // 触发链接
            elink.click();
            selfURL.revokeObjectURL(elink.href);
            document.body.removeChild(elink)
        } else {
            navigator.msSaveBlob(blob, fileName);
        }
    })
}

 2> 使用form表单,采用GET方法,参数通过input值传给后台,接收后台返回的文件流直接下载,这里注意后台接收不能用注解requestBody,而是用注解requestParam,而且url过长,不友好

exportFile(url, data) {
      //data是post请求需要的参数,url是请求url地址
      var form = document.createElement("form");
      form.style.display = "none";
      form.action = url;
      form.method = "get";
      document.body.appendChild(form);
    // 动态创建input并给value赋值
      for (var key in data) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = key;
        input.value = params[key];
        form.appendChild(input);
      }

      form.submit();
      form.remove();
 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM