2009-10-02 3 views
12

J'ai un formulaire Web que les utilisateurs remplissent en ligne. Quand ils appuient sur envoyer, ils vont commencer le téléchargement d'un fichier pour eux.Téléchargement du fichier de démarrage automatique après la soumission du formulaire

Pour l'instant, je traite la soumission de formulaire et génère un fichier approprié pour l'utilisateur et le déclenche avec des en-têtes appropriés. par exemple ...

header('Content-type: "application/octet-stream"'); 
header('Content-Disposition: attachment; filename="yourfile.txt"'); 
header("Content-Transfer-Encoding: binary"); 

Cependant, comme le téléchargement commence immédiatement, le formulaire original est laissé à l'écran par le navigateur.

Je voudrais vraiment aller à un écran de "remerciement" une fois le téléchargement terminé (ou avant le début du téléchargement). Je sais que c'est possible, parce que presque tous les sites de téléchargement que vous visitez le font (normalement pour vous remplir de publicités avant le début du téléchargement). Alors, comment afficher un écran "Merci" qui lance le téléchargement après une seconde?

Comment une solution proposée affecterait-elle le comportement du bouton de retour, car je ne veux pas que le fichier soit téléchargé à nouveau sans que le formulaire soit rempli? J'utilise PHP sur le serveur et je peux compter sur Javascript (et jQuery) étant disponible sur le client.

Merci.

Répondre

23

Vous pouvez envoyer le formulaire au Merci document et mis là une métadonnée refresh au téléchargement de fichier:

<meta http-equiv="refresh" content="3;url=download.php"> 
<p>Thank you! The download will start in 3 seconds. If not, use this link to download the <a href="download.php">file</a></p> 
+0

juste une note - ne se déclenche pas dans firefox – Andrej

+1

@Andrej Avez-vous mis 'meta' dans' head' et 'p' dans' body'? – Gumbo

3

Ajouter une deuxième page qui dit quelque chose « merci, votre donwnload sera commencer dans quelques secondes » et déclenche le téléchargement en utilisant javascript:

$(document).ready(function(){ 
    window.setTimeout(function(){ 
    window.location = 'http://yourdownloadhost.com/file.zip'; 
    }, 1500); 
}); 

ou utiliser une méta redirect.

+0

Pourquoi utiliser javascript quand une méta-redirection fonctionne aussi? –

+0

Eh bien, comme vous pouvez le voir dans mon commentaire sur le post de Gumbo, je préfère moi-même META redirect. Cependant, j'ai été trompé par l'OP "peut compter sur Javascript (et jQuery)". Cependant, certains systèmes de modèles rendent difficile l'injection de données dans le . Donc, parfois JS pourrait être une option. – middus

+0

Devrait être dans l'en-tête aussi. AFAIK javascript dans le corps sont illégaux. –

0

Vous pouvez insérer un cadre iFr caché dans votre page et soumettre votre formulaire à cette iframe.

Questions connexes