Pregunta

Estamos ejecutando Tomcat, y estamos generando archivos pdf sobre la marcha. No tengo el tamaño del archivo de antemano, por lo que no puedo enlazar directamente a un archivo en el servidor. Así que envío directamente la salida.

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

Y luego salgo directamente a este OutputStream.

El único problema es que el receptor no obtiene el tamaño del archivo, por lo que no saben cuánto tiempo tomará la descarga. ¿Hay alguna manera de decirle a la respuesta el tamaño del archivo?

EDIT   Sé el tamaño del archivo, simplemente no puedo decirle a STREAM qué tan grande es el archivo.

¿Fue útil?

Solución

El objeto de respuesta debe tener un setContentLength método:

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

Otros consejos

Serialice el flujo de bytes PDF a un archivo o en una matriz de bytes, calcule su tamaño, establezca el tamaño y escríbalo en el flujo de salida.

Creo que estás respondiendo la pregunta por ti mismo: citar: No tengo el tamaño del archivo de antemano, por lo que envío directamente la salida.

Si no tienes el tamaño, no puedes enviarlo ...

¿Por qué no generar el archivo PDF en el sistema de archivos temporal, o el sistema de archivos de base ram o el archivo de mapa de memoria sobre la marcha. entonces puede obtener el tamaño del archivo.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top