2011-05-06 28 views
6

Tengo un problema con Apache POI. Intento devolver un archivo después de haber procesado los datos relevantes. Cuando voy a devolver el archivo al navegador (IE8/9, Firefox), el navegador devuelve una carga de caracteres basura. Esto solo ocurre cuando el archivo de Excel es grande y el proceso se ha estado ejecutando durante, por ejemplo, 2 minutos más. De lo contrario, devuelve un archivo que luego puedo abrir en Excel.Problema de salida de POI de Apache

Se agradece cualquier ayuda, gracias.

response.setContentType("application/vnd.ms-excel"); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + ".xls\""); 
OutputStream out = null; 

try { 
    out = new BufferedOutputStream(response.getOutputStream()); 
    wb.write(out); 
    out.flush();  
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

Respuesta

4

Creo que también debe especificar la duración del contenido. Esta es la línea que debe insertar:

response.setContentLength(/* length of the byte[] */); 

le sugiero que el uso de la clase Apache Commons IOUtils para hacer frente a las matrices de bytes y arroyos.

+0

Gracias por la respuesta, ¿cuál sería la mejor manera de encontrar la duración de la transmisión? – Clive

+0

No puedo ver la clase de la variable 'wb'. ¿Es ese el libro de trabajo? En ese caso sugiero: ByteArrayOutputStream bos = new ByteArrayOutputStream(); wb.write (bos); response.setContentLength (bos.size()); response.getOutputSream(). Write (bos.toByteArray()); response.getOutputStream(). Flush(); response.getOutputStream(). Close(); – jabal

Cuestiones relacionadas