调用download方法,可以下载,可以弹出窗口.
public
void
download(ActionEvent event) {
String path=(String)getRequestParameter(
"path"
);
String fileName=(String)getRequestParameter(
"fileName"
);
try
{
downloadFile(path, fileName);
}
catch
(IOException e) {
setErrorMessage(
"File not found."
);
e.printStackTrace();
}
}
public
static
void
downloadFile(String path, String fileName)
throws
IOException {
// 获得JSF上下文环境
FacesContext context = FacesContext.getCurrentInstance();
// 获得ServletContext对象
ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
// 取得文件的绝对路径
String realName = servletContext.getRealPath(path) +
"/"
+ fileName;
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
downloadFile(httpServletResponse, realName, fileName);
FacesContext.getCurrentInstance().responseComplete();
}
public
static
void
downloadFile(HttpServletResponse response,
String realName, String fileName)
throws
IOException{
response.setHeader(
"Content-disposition"
,
"attachment; filename="
+ fileName);
response.setContentType(
"application/x-download"
);
//File exportFile = new File(realName);
//response.setContentLength((int) exportFile.length());
ServletOutputStream servletOutputStream = response.getOutputStream();
byte
[] b =
new
byte
[
1024
];
int
i =
0
;
FileInputStream fis =
new
java.io.FileInputStream(realName);
while
((i = fis.read(b)) >
0
) {
servletOutputStream.write(b,
0
, i);
}
}