为什么HSSFWorkbook.write不能在HttpServletResponse中工作

我使用下面的代码在输出stream中编写一个excel文件。 但是,当我在Excel中打开下载的文件,它有开放的问题。

HSSFWorkbook workbook = getWorkBook(); FacesContext context = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) FacesContext .getCurrentInstance().getExternalContext().getResponse(); response.setHeader("Content-Disposition", "attachment;filename=someName.xls"); response.setContentLength(workbook.getBytes().length); response.setContentType("application/vnd.ms-excel"); try { workbook.write(response.getOutputStream()); response.getOutputStream().close(); } catch (Exception ex) { ex.printStackTrace(); } 

当然我把结果写在一个文件中,这是正确的。

我通过删除下面的代码来解决这个问题。

 response.setContentLength(workbook.getBytes().length);