El archivo de Excel exportado al ServletOutputStream está corrupto.
Estoy escribiendo un archivo de Excel en un ServletOutputStream (usando HSSFWorkbook para xls y XSSFWorkbook para xlsx). El Excel que se descarga como parte de la ServletResponse está corrupto y contiene caracteres basura.
outStream = response.getOutputStream(); //ServletOutputStream outStream
workbook.write(outStream); //HSSFWorkbook/XSSFWorkbook
workbook.close();
outStream.flush();
He intentado escribir el archivo de Excel en un FileOutputStream y funciona correctamente. El archivo de Excel es legible y está intacto.
He revisado varias consultas de StackOverflow sobre el mismo problema. He intentado cambiar el tipo de contenido de la respuesta del servlet a “application/excel”, “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”, “application/vnd.ms-excel”, etc. Pero el problema aún persiste.
Sin embargo, necesito escribir el archivo de Excel en un ServletOutputStream (consciente de la naturaleza binaria del flujo de salida del servlet y también he intentado escribir el Excel en un ByteOutputStream y luego escribir desde el ByteOutputStream derivado a ServletOutputStream).
Por favor ayuda.
PD: Este código se ha realizado tanto desde una página JSP como desde una clase Java Servlet. Ambos producen el mismo resultado.
davy.ai
Parece que el problema está en escribir el archivo de Excel en el ServletOutputStream. Mientras que escribir en FileOutputStream funciona bien, el archivo de Excel se corrompe y contiene caracteres basura cuando se escribe en ServletOutputStream.
Has intentado cambiar el tipo de contenido de la respuesta del servlet a diferentes valores, pero el problema persiste. Eres consciente de la naturaleza binaria del flujo de salida del servlet y has intentado escribir el Excel en ByteArrayOutputStream y luego escribir desde el ByteArray derivado hacia ServletOutputStream, pero el problema aún persiste.
Dadas estas circunstancias, puede que valga la pena considerar lo siguiente:
Espero que esto te ayude a resolver el problema.