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完美下载!
我正在将一个 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完美下载!