Java类如下
public static void downloadFile(String path,String fileName) {
try {
// 获得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);
} catch (IOException e) {
e.printStackTrace();
}
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);
}
}
使用方法
1、在backing bean的方法中调用函数1即可。如Abean中download方法调用了该方法,前台可以这样调用:
<h:commandButton value="download" action="#{aBean.download}"></h:commandButton>
或者
<h:commandLink value="download" action="#{fileUploadForm.download}"></h:commandLink>
2、jsp页面可以这样调用:
<%@ page contentType="text/html; charset=gb2312"%><%@page import="java.io.*"%><%
String filename = "";
if (request.getParameter("filename") != null) {
filename = request.getParameter("filename");
}
try {
framework.util.FileUtils.downloadFile(response,getServletContext().getRealPath(filename),filename);
} catch(final IOException e) {
System.out.println ( "出现IOException." + e );
} catch(final IllegalStateException e) {
System.out.println ( "出现IllegalStateException." + e );
}
%>
于是jsf页面我们可以借助outputlink来调用该页面
<h:outputLink id="downloadfile" value="#{page/FileDownload.jsp?filename=}">
<t:outputText value="下载文件" />
</h:outputLink>
文章来源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!812.entry