如何在 PHP 的后台导出然后下载带有 Ajax 调用的 Excel 文件



我必须以excel格式导出大文件并下载它。 我正在使用PHP Excel。文件非常大,因此导出需要很长时间。所以我正在使用异步 ajax 调用,而在服务器端,我正在使用 session_write_close。通过这个我可以发送并发呼叫,如果我保持在同一页面上,这是可以正常工作的......但是当我发送 ajax 调用以导出和下载文件,然后我在完成该 ajax 调用之前重定向到一个新页面时,该 ajax 调用被取消并且无法下载文件。如何导出文件,然后在用户被重定向到新 URL 后下载它。

有几种方法可以在同一页面上执行下载操作。使用异步可能会导致问题,您的应用程序可能会在 ajax 操作之间感到滞后。

根据我的意见,您可以通过这种方式执行ajax请求。

创建文件时,如果可能,请使用命令行方法。或者,您可以简单地将系统命令与 curl 或 elinks 命令一起使用,并传递用于生成 excel 文件的 url。

curl http://mysite/generate/excel?id=123

elinks http://mysite/generate/excel?id=123

通过使用 ajax ( sync (,您可以使用保持活动选项发出请求,并在代码中检查文件是否以一定的间隔创建。 你的代码将是这样的

while (!file_exists("path/to/excel_file.xlsx")) {
   usleep(2000);
}
echo json_encode(["status" => true, "file_url" => "http://mysite/url/to/excel_file.xlsx"]);

一旦你得到来自ajax的响应,成功时调用下面的函数,文件网址通过iframe在同一页面上下载文件。

downloadAttachment(response.file_url)
/* Amazing download management with error handling */
var downloadAttachment = function(link){
    var iframe = document.createElement("iframe"), iframeWindow;
    iframe.src = link;
    document.body.appendChild(iframe);
    iframe.onload = function(){
        response = JSON.parse($(iframe).contents().text())
        if(!response.status)
        {
            alert(response.message);
            $(iframe).remove();
        }
    }
    setTimeout(function(){
        $(iframe).remove();
    },10000)
}

这是在生成大文件需要很长时间时如何下载大文件的逻辑流程。

最新更新