Question

Dans notre projet actuel, nous fournissons un téléchargement au format PDF que l'utilisateur peut personnaliser grâce à un formulaire HTML qu'il soumet. Il faut plusieurs secondes pour générer dynamiquement le fichier PDF et j'aimerais le visualiser, par exemple. en désactivant le bouton d'envoi jusqu'à ce que le téléchargement commence. Malheureusement, je n'ai pas trouvé de moyen de détecter le début du téléchargement *. Je ne saurais donc pas quand réactiver le bouton d'envoi.

J'ai déjà essayé de spécifier un IFrame comme cible de mon formulaire HTML, en espérant que l'événement onload serait déclenché. Cependant, ce n’est pas le cas - probablement parce que le PDF est envoyé avec un " Contenu-disposition: pièce jointe ". en-tête et il n'est pas réellement chargé dans l'IFrame.

La seule solution à laquelle je puisse penser actuellement consiste à générer le fichier PDF dans un fichier temporaire sur le serveur, ce que je voudrais éviter.

*) Permettez-moi de clarifier ceci: je n'aurais pas besoin de savoir si le téléchargement était terminé ou même s'il était réellement commencé. Je voudrais détecter le moment où le navigateur demandera à l'utilisateur s'il veut ouvrir ou sauvegarder le fichier. Je suppose que cela se produit lorsque le navigateur reçoit l'en-tête HTTP.

Était-ce utile?

La solution

Vous voulez pouvoir détecter le moment où la taille du fichier téléchargé passe de 0 à une valeur positive. Autant que je sache, il est impossible de faire cela avec JavaScript - vous avez besoin d'un plug-in qui puisse accéder au système de fichiers du client.

Solution recommandée: créez une session par téléchargement. Demandez au client d'interroger le serveur sur l'état du téléchargement. Cela pourrait être "non existé", "non commencé", "commencé", "fini". Certains travaux côté serveur sont nécessaires pour persister et mettre à jour l’état du téléchargement, ainsi qu’un framework AJAX.

Autres conseils

Si j'étais vous, je ferais un appel AJAX sur le serveur avec les informations, générerait le fichier, puis renverrais le nom du fichier / id / quoi que ce soit en javascript, ce qui donnerait à window.location un aspect similaire à download.php? id = x (mais le fichier a déjà été généré, il est donc juste de définir les en-têtes et de le lire). Vous pouvez alors réactiver l'envoi.

La solution la plus simple consisterait à estimer le temps (de manière généreuse) et à le faire de cette façon. C'est un hack, mais ça donne l'effet désiré. L'autre option peut être d'envoyer le formulaire avec un rappel en utilisant Ajax pour soumettre le formulaire et que le générateur renvoie les détails à la page d'appel. http://www.jquery.com/ peut être un bon point de départ pour cette option.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top