2009-05-04 8 views
0

Nous exécutons tomcat, et nous générons des fichiers pdf à la volée. Je n'ai pas la taille du fichier auparavant, donc je ne peux pas directement relier un fichier sur le serveur. Donc, j'envoie directement la sortie.Jsp télécharger la taille du fichier

response.setContentType("application/force-download"); 
OutputStream o = response.getOutputStream(); 

Ensuite, je publie directement sur ce OutputStream.

Le seul problème est que le récepteur n'obtient pas la taille de fichier, donc ils ne savent pas combien de temps le téléchargement prendra. Existe-t-il un moyen de dire à la réponse quelle est la taille du fichier? Je connais la taille du fichier, je ne peux pas dire au flux de quelle taille est le fichier.

Répondre

5

L'objet de réponse doit avoir une méthode setContentLength:

// Assumes response is a ServletResponse 
response.setContentLength(sizeHere); 
+0

Ceci est la bonne réponse. Le PO a mis à jour la question et a dit qu'il connaissait la taille du fichier, mais ne sait pas comment le spécifier dans la réponse. –

1

Sérialiser le flux d'octets PDF vers un fichier ou dans une matrice d'octets calculer sa taille, définir la taille et l'écrire dans le flux de sortie.

+0

J'ai le pdf en tant que fichier. Je dois dire au FLUX quelle est la taille du fichier. – Milhous

+0

C'est très inefficace, surtout pour les fichiers PDF volumineux, et si avertir les utilisateurs du temps de téléchargement restant est une préoccupation, il y a de fortes chances que le fichier soit volumineux. –

+0

Eh bien, c'est juste un pdf qui peut être de 2-56MB. – Milhous

0

Je crois que vous répondez à la question vous-même: citation: Je n'ai pas la taille du fichier avant la main, donc j'envoie directement la sortie.

Si vous n'avez pas la taille vous ne pouvez pas l'envoyer ....

+0

la taille n'est pas statique, mais je le sais quand j'envoie la page. – Milhous

0

Pourquoi ne pas générer le fichier PDF dans le système de fichier temporaire, ou système de fichiers base de RAM ou fichier carte mémoire à la volée . alors vous pouvez obtenir la taille du fichier.

response.setContentType ("application/force-download"); response.setContentLength (sizeHere); OutputStream o = réponse.getOutputStream();

+0

J'ai la taille du fichier. Voir mon Edit. – Milhous

Questions connexes