React实现导出功能
<div>1、React导出excel功能</div><div>
<div class="cnblogs_code">
<pre><Button colors="primary" onClick={_this.export}><span style="color: rgba(0, 0, 0, 1)">
导出
</span></Button>
export=()=><span style="color: rgba(0, 0, 0, 1)">{
let searchObj </span>=<span style="color: rgba(0, 0, 0, 1)"> {searchMap:{}};
let {searchMap} </span>= searchObj;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询条件</span>
let downUrl = `api/export`
<span style="color: rgba(0, 0, 0, 1)"> exportFile(downUrl,{searchMap})
}</span></pre>
</div>
</div>
<div>1> 使用Blob对象,从服务器接收到的文件流创建了一个blob对象,并使用该blob创建一个指向类型数组的URL,将该url作为a标签的链接目标,</div>
<div>然后去触发a标签的点击事件从而实现表格下载导出函数代码如下</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> exportFile(url, data) {
axios({
method: </span>'post'<span style="color: rgba(0, 0, 0, 1)">,
url: url,
data: data,
responseType: </span>'blob'<span style="color: rgba(0, 0, 0, 1)">
}).then((res) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
const content </span>=<span style="color: rgba(0, 0, 0, 1)"> res.data;
const blob </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Blob();
const fileName </span>= "导出数据.xls"<span style="color: rgba(0, 0, 0, 1)">;
const selfURL </span>= window;
let elink </span>= document.createElement('a'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ('download' <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> elink) {
elink.download </span>=<span style="color: rgba(0, 0, 0, 1)"> fileName;
elink.style.display </span>= 'none'<span style="color: rgba(0, 0, 0, 1)">;
elink.href </span>= selfURL['createObjectURL'<span style="color: rgba(0, 0, 0, 1)">](blob);
document.body.appendChild(elink);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触发链接</span>
<span style="color: rgba(0, 0, 0, 1)"> elink.click();
selfURL.revokeObjectURL(elink.href);
document.body.removeChild(elink)
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
navigator.msSaveBlob(blob, fileName);
}
})
}</span></pre>
</div>
<p> 2> 使用form表单,采用GET方法,参数通过input值传给后台,接收后台返回的文件流直接下载,这里注意后台接收不能用注解requestBody,而是用注解requestParam,而且url过长,不友好</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">exportFile(url, data) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">data是post请求需要的参数,url是请求url地址</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> form = document.createElement("form"<span style="color: rgba(0, 0, 0, 1)">);
form.style.display </span>= "none"<span style="color: rgba(0, 0, 0, 1)">;
form.action </span>=<span style="color: rgba(0, 0, 0, 1)"> url;
form.method </span>= "get"<span style="color: rgba(0, 0, 0, 1)">;
document.body.appendChild(form);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 动态创建input并给value赋值</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> key <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> data) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> input = document.createElement("input"<span style="color: rgba(0, 0, 0, 1)">);
input.type </span>= "hidden"<span style="color: rgba(0, 0, 0, 1)">;
input.name </span>=<span style="color: rgba(0, 0, 0, 1)"> key;
input.value </span>=<span style="color: rgba(0, 0, 0, 1)"> params;
form.appendChild(input);
}
form.submit();
form.remove();
}</span></pre>
</div>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/zhangyaolan/p/11918234.html
頁:
[1]