Jsf 文件下载字节显示为纯文本,而不是实际的附件

Jsf 文件下载字节显示为纯文本,而不是实际的附件,jsf,download,seam2,Jsf,Download,Seam2,我想我已经把所有的部分放在一起提供了下载文件。相反,下面的代码是在浏览器本身上写入字节数组。我确信字节[]没有任何问题,因为我之前使用FileOutputStream生成excel文件 FacesContext fc = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse)fc.getExternalContext().getResponse();

我想我已经把所有的部分放在一起提供了下载文件。相反,下面的代码是在浏览器本身上写入字节数组。我确信字节[]没有任何问题,因为我之前使用FileOutputStream生成excel文件

    FacesContext fc = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse)fc.getExternalContext().getResponse();

    InputStream templateInputStream=null;

    try {
        templateInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(SOME_PATH);
        if(templateInputStream==null) {
            throw new WebException("Template not found at: "+SOME_PATH);
        }

        byte[] suppData= ExcelRenderer.render(templateInputStream, data);

        response.reset();
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition","attachment;filename=\""+REPORT_FILE_NAME+"\"");

        response.getOutputStream().write(suppData);

        response.flushBuffer();
        fc.responseComplete();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally{

        if (templateInputStream!=null){
            templateInputStream.close();
        }
    }

您是否尝试在附件中的分号后添加空格;文件名?您是否使用浏览器开发人员工具检查了浏览器是否接收到标题?
response.reset()您已经在响应中写入了一些内容?是的……你不能总是重置它。@BalusC:祝贺你获得了500公里的重复积分!响应头内容配置:附件;filename=“Reports.xlsx”内容类型:应用程序/八位字节流日期:2014年8月14日星期四15:37:42 GMT服务器:Apache Coyote/1.1传输编码:分块X-Powered-By:JSF/1.2