Maison > interface Web > js tutoriel > Comment puis-je détecter de manière fiable la fin du téléchargement de fichiers dans un navigateur sans événements de « chargement » cohérents ?

Comment puis-je détecter de manière fiable la fin du téléchargement de fichiers dans un navigateur sans événements de « chargement » cohérents ?

DDD
Libérer: 2024-12-18 05:56:15
original
879 Les gens l'ont consulté

How Can I Reliably Detect File Download Completion in a Browser without Consistent

Détection de la fin du téléchargement de fichiers dans les navigateurs

La génération et le téléchargement dynamiques de fichiers peuvent être un défi lorsqu'il s'agit de fournir des commentaires aux utilisateurs. Cet article examine un scénario dans lequel un serveur génère un fichier en réponse à une requête, mais le navigateur ne fournit pas d'indication claire du moment où le téléchargement est terminé.

Le problème : les limitations de la détection d'événements

Le problème : les limitations de la détection d'événements

L'auteur a eu du mal à détecter la fin du téléchargement dans son scénario où le fichier était généré dynamiquement et enregistré dans une iframe cachée. L'événement « load » sur l'iframe ne s'est pas déclenché de manière cohérente dans tous les navigateurs, ce qui a conduit à un indicateur peu fiable.

Solution alternative : interrogation côté client

  • Une solution implique en utilisant un mécanisme d'interrogation côté client en JavaScript. L'algorithme fonctionne comme suit :
  • Un jeton unique est généré et inclus dans la demande de téléchargement.
  • Le navigateur affiche un indicateur "en attente".
  • Un minuteur est démarré et recherche périodiquement un cookie portant le nom "fileDownloadToken".

Si le cookie est présent et correspond au jeton, le L'indicateur "en attente" est masqué.

Réponse côté serveur

Le code côté serveur répond en définissant un cookie avec le nom "fileDownloadToken" lorsque le La requête contient une valeur de jeton non vide. Ce cookie sert à signaler au code côté client que le téléchargement est terminé.

Implémentation du code

function blockResubmit() {
  // ...
  downloadTimer = window.setInterval(function() {
    var token = getCookie("fileDownloadToken");

    if (token == downloadToken || attempts == 0) {
      unblockSubmit();
    }

    attempts--;
  }, 1000);
}
Copier après la connexion

Exemple de JavaScript côté client :

$TOKEN = "downloadToken";

// Sets a cookie so that when the download begins the browser can
// unblock the submit button.
$this->setCookieToken($TOKEN, $_GET[$TOKEN], false);

$result = $this->sendFile();
Copier après la connexion

Exemple PHP côté serveur :

    Avantages de ceci Approche
  • Il ne nécessite pas la création de fichiers temporaires sur le serveur.
  • Il est compatible avec plusieurs navigateurs.
Il fournit un moyen fiable de détecter achèvement du téléchargement dans le scénario spécifié.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal