2010-09-09 4 views
0

Comment forcer une invite de téléchargement à apparaître avant d'envoyer des données au navigateur? Je connais l'attachement à la disposition du contenu, mais c'est différent. Fondamentalement, la servlet commence à envoyer des données au client, puis le client ouvre une boîte de dialogue, ouvre, enregistre, annule.Comment forcer une invite de téléchargement, avant les données qu'elle a envoyées à partir d'une servlet?

L'est probablement mon servlet est lent à obtenir les données, et il obtient toutes les données dans la mémo avant d'envoyer quelque chose au client. Je voudrais faire quelque chose pour déclencher le dialogue, avant que je suis prêt à envoyer les données. Sinon, le navigateur attend juste là, comme si vous n'aviez rien fait.

Je veux déclencher ce dialogue de sauvegarde plus tôt. Je ne peux pas envoyer de données, car les données ne sont pas prêtes.

Des idées?

Grae

+0

D'où proviennent ces données? La lenteur doit être résolue en écrivant juste ** immédiatement ** les octets entrants à la sortie plutôt que de les saisir dans la mémoire de Java en premier. [Voici un autre exemple traitant un cas CSV] (http://stackoverflow.com/questions/3458577/accessing-data-from-servlet/3458921#3458921). – BalusC

+0

La lenteur est probablement difficile à éliminer. –

Répondre

0

Vous pouvez simplement utiliser le OutputStream et envoyer des données dessus. De cette façon, vous n'avez pas besoin de récupérer toutes les données en mémoire.


Sur le même sujet:

+0

La chose est, je veux déclencher le dialogue Enregistrer sous, avant que je suis prêt à envoyer les données. Y at-il un moyen de démarrer la boîte de dialogue, avant le premier OutputSteam.println() –

+0

Vous pouvez envoyer des données inutiles, mais le fait est que si vous voulez juste télécharger quelque chose, vous n'avez pas besoin de le charger en mémoire. –

+0

Des "données inutiles" peuvent nuire, surtout lorsque toute la réponse concerne des données binaires. – BalusC

1

Si vous voulez que votre application apparaisse plus sensible à l'utilisateur (et éviter plusieurs clics sur le lien de téléchargement) considèrent pour faire pointer le lien vers un emplacement (servlet ou JSP) qui ne fait rien d'autre qu'une redirection 301/302 avec un corps de réponse, c'est-à-dire une page HTML affichant un message demandant à l'utilisateur d'être patient pendant Les données sont collectées. L'emplacement de la redirection doit ensuite pointer vers votre servlet qui fournit le téléchargement.

Questions connexes