jsf实现文件下载和servlet实现文件下载非常类似,主要实现方式是向response流中写人response头和文件数据。下面是简单的实现方式,支持多版本浏览器,但不支持断点下载。
File file = new File(filePath);
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setContentType("application/msdownload");
response.setCharacterEncoding("UTF-8");
response.setContentLength(new Long(file.length()).intValue());//文件长度
response.setHeader("Content-Disposition", "attachment; filename=\""+ file.getName() + "\"");//文件名
ServletOutputStream out = null;
FileInputStream fis = null;
BufferedReader reader = null;
String readLine = null;
try {
out = response.getOutputStream();
fis = new FileInputStream(file);
reader = new BufferedReader(new InputStreamReader(fis));
while((readLine = reader.readLine()) != null) {
try {
out.write(readLine.getBytes());
}catch(Exception e) {
}
}
out.flush();
context.responseComplete();
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
close(fis, reader, out);
}
以上就是jsf文件下载的实现。