Maison >interface Web >js tutoriel >Comment pouvons-nous détecter de manière fiable la fin du téléchargement des fichiers du navigateur sans événements du navigateur ?

Comment pouvons-nous détecter de manière fiable la fin du téléchargement des fichiers du navigateur sans événements du navigateur ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 21:11:14434parcourir

How Can We Reliably Detect Browser File Download Completion Without Browser Events?

Détection de la fin du téléchargement des fichiers du navigateur

Énoncé du problème

Une page comportant un mécanisme de téléchargement de fichiers dynamique nécessite un indicateur visuel pour signaler lorsque le téléchargement est terminé. Cependant, les navigateurs ne déclenchent pas toujours des événements pour indiquer la réception du fichier lorsqu'une boîte de dialogue « Enregistrer » apparaît.

Limites de réponse du serveur

La fourniture d'une « Disposition de contenu : L'en-tête "attachement" demande aux navigateurs d'afficher la boîte de dialogue "Enregistrer", mais il supprime le chargement de l'iframe utilisé pour l'événement surveillance.

Solution proposée

Mettre en œuvre une solution basée sur le client exploitant JavaScript et les cookies côté serveur :

Algorithme client

  1. Générer un message unique token.
  2. Soumettez la demande de téléchargement avec le token.
  3. Affichez l'indicateur "en attente".
  4. Interrogez le serveur à intervalles réguliers pour un cookie nommé "fileDownloadToken" qui correspond le token.
  5. Si le cookie est trouvé, supprimez le "en attente" indicateur.

Algorithme du serveur

  1. Extraire le jeton de la requête.
  2. Créer un cookie avec le nom "fileDownloadToken" et définissez sa valeur sur le jeton reçu.

Exemple Implémentation

  • JavaScript côté client (simplifié)
var downloadToken = setFormToken();

var downloadTimer = setInterval(function() {
  var token = getCookie("fileDownloadToken");

  if(token == downloadToken) {
    unblockSubmit();
  }
}, 1000);
  • PHP côté serveur (simplifié)
// Set a cookie to unblock the submit button when download starts
$this->setCookieToken("downloadToken", $_GET["downloadToken"]);

$result = $this->sendFile();

Avantages

  • Ne nécessite pas la création de fichiers temporaires.
  • Détecte la préparation au téléchargement des fichiers sans compter sur les auditeurs d'événements.
  • Peut être personnalisé en fonction de noms de jetons et de cookies spécifiques paramètres.

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