思路:使用ajax多次請求服務器,分段生成多個Excel,然后打包壓縮成zip,超鏈接指向下載的文件然后下載。
【HTML部分】
<input type="button" value="確定導出" onclick="export()"> <a style="display: none" id="export_success" href="/uploads/excel.zip">導出成功,點擊下載Excel</a>
【JS部分】
function export(){ if(!confirm('導出時間較長,請耐心等待,導出成功前請勿刷新頁面!是否繼續?')){ return false; } ajaxGetExportData(1); var res = 0; $.ajax({ type: "GET", async: false, url: "/download_zip.php", success:function(data){ res = data; } }); if(res == 0){ alert('導出失敗'); }else{ $("#export_success").show(); } } function ajaxGetExportData(page){ var res = 0; $.ajax({ type: "GET", async: false, url: "/export.php?page="+page, success:function(data){ res = data; } }); if(res == 1){ page++; ajaxGetExportData(page); } return true; }
【PHP部分】
export.php
$page = $_GET['page']; if($page <= 3){ $file_path = 'uploads/excel'; if (!file_exists($file_path)) { @mkdir($file_path,0777,true); } $file_name = $file_path . '/' . $page . '.txt'; file_put_contents($file_name,'123'); echo 1; }else{ echo 0; }
download_zip.php
$file_path = BASEPATH . '../uploads/excel'; $zip_name = BASEPATH . '../uploads/excel.zip'; @unlink($zip_name); // 加載zip類 $this->load->library('MakeZip'); $res = new MakeZip($file_path,$zip_name); if($res){ echo 1; }else{ echo 0; } exit;
最后一步:生成zip文件,參考:https://www.cnblogs.com/kccdzz/p/10273674.html