如何检查状态并从后台php中的服务器链接下载文件



我有一个应用程序,用户上传CSV或TXT文件,我的系统验证该文件中的电子邮件,然后将结果下载到上传目录。但有时,如果文件大小很大,比如有100万封电子邮件,则需要一些时间来验证该文件。并且该文件的下载链接将不可用。在这种情况下,我想向用户显示我们正在验证他的文件。这可能需要几分钟,我知道怎么做。我需要知道如何制作一个脚本,检查状态是否不等于已完成,然后等待一段时间,然后再次尝试下载文件。注意:脚本将转到一个链接并下载带有file_put_contents的文件(UPLOAD_DIRECTORY,fopen($url((;

这是下载文件的功能

function downloadResultFilesInServer($file_id, $fileName) {
$downloadURL = "https://bulkapi.millionverifier.com/bulkapi/v2/download";
$key = VERIFIER_API_KEY;
$url = $downloadURL . "?key=$key&file_id=$file_id&filter=";
file_put_contents(UPLOAD_DIRECTORY . "/" . $fileName . "_OK_ONLY.csv", fopen($url . "ok", 'r'));
file_put_contents(UPLOAD_DIRECTORY . "/" . $fileName . "_OK_AND_CATCH_ALL.csv", fopen($url . "ok_and_catch_all", 'r'));
file_put_contents(UPLOAD_DIRECTORY . "/" . $fileName . "_UNKNOWN.csv", fopen($url . "unknown", 'r'));
file_put_contents(UPLOAD_DIRECTORY . "/" . $fileName . "_INVALID.csv", fopen($url . "invalid", 'r'));
file_put_contents(UPLOAD_DIRECTORY . "/" . $fileName . "_FULL_REPORT.csv", fopen($url . "all", 'r'));
}

以下是我的条件

// If verification is in progress insert the details in db
if (in_array($o["status"],['in_progress'])) {
$_SESSION['verifyInProgress'] = $o["file_id"];
insertEmailListResultsInDatabase($userId, $o, $fileNameNew, $connection);
} elseif (in_array($o["status"],['canceled'])) {
// if verification is cancelled show user alert
echo "<script>alert('Verification was canceled by user')</script>";
}
if (!in_array($o["status"],['finished', 'canceled'])) {
// keep trying to download file 
}

要检查文件状态,您应该创建一个JavaScript方法来调用一个端点,该端点提供有关状态的更新信息。

您可以使用setInterval和fetch API来调用服务器。

下面是一个工作示例:

var checkFile = setInterval(checkFileStatusOnServer, 5000); // Call the server every 5 seconds
function checkFileStatusOnServer() {
const todoIds = [2, 3, 4];
const randomId = todoIds[Math.floor(Math.random() * todoIds.length)];
fetch('https://jsonplaceholder.typicode.com/todos/' + randomId)
.then(response => response.json())
.then(json => {
console.log(json.completed);
const completed = Boolean(json.completed);
if(completed) {
alert('Download file!');
clearInterval(checkFile);
}
return json.completed;
});
}

在此API上,仅完成TODO ID 4。当文件最终可以下载时,让我们将此项作为一个示例。

更新

您应该使用PHP中的实际实现来更改fetch方法中的URL,在PHP中处理文件,并在文件准备好后立即下载。

最新更新