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