Maison >interface Web >js tutoriel >Comment puis-je détecter de manière fiable la fin du téléchargement d'un fichier dans un navigateur ?

Comment puis-je détecter de manière fiable la fin du téléchargement d'un fichier dans un navigateur ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 21:06:49498parcourir

How Can I Reliably Detect File Download Completion in a Browser?

Gérer la détection de fin de téléchargement de fichiers

Problème :

Détection lorsqu'un navigateur reçoit entièrement un Le téléchargement de fichiers générés dynamiquement devient crucial lors de l'affichage des indicateurs d'attente. Actuellement, l'utilisation de l'événement « load » d'une iframe ne parvient pas à résoudre ce problème en raison d'incohérences du navigateur.

Solution 1 : vérification des jetons basée sur le navigateur

Un JavaScript côté client la solution implique :

  • Générer un jeton unique pour le téléchargement demande.
  • Soumission de la demande avec le jeton.
  • Affichage d'un indicateur "en attente".
  • Réglage d'une minuterie pour vérifier périodiquement un cookie correspondant avec la valeur du jeton.
  • Masquer l'indicateur lors de la recherche du cookie.

Côté serveur, le algorithme :

  • Vérifie le jeton dans la requête.
  • Définit un cookie avec la valeur du jeton s'il est trouvé.

Extrait de code ( JavaScript) :

function setFormToken() {
  var downloadToken = new Date().getTime();
  document.getElementById("downloadToken").value = downloadToken;
  return downloadToken;
}

Extrait de code (PHP) :

// Set a cookie to unblock submit button when download begins.
$TOKEN = "downloadToken";
$this->setCookieToken($TOKEN, $_GET[$TOKEN]);

Solution 2 : interrogation du serveur

Alternativement, une approche côté serveur implique :

  • Lancement de la création du fichier.
  • Interrogation du serveur jusqu'à achèvement.
  • Téléchargement du fichier prêt.

Cette méthode évite de créer des fichiers temporaires sur le serveur. Cependant, cela nécessite une communication client-serveur pendant la période d'attente.

Avantages et inconvénients :

L'utilisation d'un jeton de navigateur permet une détection dynamique, mais peut entraîner des problèmes de compatibilité avec le navigateur. . L'interrogation du serveur est une option plus fiable mais plus lente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn