Excel 导出到 ServletOutputStream 的文件已损坏

Excel file exported to ServletOutputStream is corrupted

我正在将一个 excel 文件写入 ServletOutputStream(对 xls 使用 HSSFWorkBook,对 xlsx 使用 XSSFWorkBook)。作为 ServletResponse 的一部分下载的 excel 已损坏并包含垃圾字符。

  outStream = response.getOutputStream(); //ServletOutputStream outStream
  workbook.write(outStream); //HSSFWorkBook/XSSFWorkBook
  workbook.close();
  outStream.flush();

我已经尝试将 excel 文件写入 FileOutputStream 并且工作正常。 excel 文件可读且完整。

检查了关于同一问题的其他几个 Whosebug 查询。曾尝试将 servlet 响应的内容类型更改为“application/excel”、“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”、“application/vnd.ms-excel”等.但是问题依然存在

但是,我需要将 excel 写入 ServletOutputStream(意识到 servlet 输出流的二进制性质并且还尝试将 excel 写入 ByteOutputStream,然后从派生的 ByteOuputArray 写入到ServletOutputStream).

请帮忙。

PS:此代码已从 JSP 和 Java Servlet class 完成。两者产生相同的结果。

非常感谢 BalusC!

我已按照建议重置 HttpServletResponse object,然后设置 header 并将 excel 写入 ServletOutputStream。

response.reset()

excel完美下载!