JSF点滴积累--通用文件下载函数
来源:互联网 发布:java ftp下载文件代码 编辑:程序博客网 时间:2024/04/30 01:00
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) context .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);
}
}
try {
// 获得JSF上下文环境
FacesContext context = FacesContext.getCurrentInstance();
// 获得ServletContext对象
ServletContext servletContext = (ServletContext) context
.getExternalContext().getContext();
// 取得文件的绝对路径
String realName = servletContext.getRealPath(path) + "/"
+ fileName;
HttpServletResponse httpServletResponse = (HttpServletResponse) context .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 );
}
%>
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>
<t:outputText value="下载文件" />
</h:outputLink>
3、加入下载文件权限控制
在多数情况,我们可能需要对不合法的用户进行权限控制,而通过此通用函数就可以将文件下载权限控制集中到一个点上,减少冗余代码和繁琐的控制。
我们可以在第二个downloadFile增加一个参数HttpServletRequest request,然后在该函数开头加上判断权限的语句,如:
//取得权限Bean后,进行权限判断和提示
if (idBean==null||idBean.getUserLev().equals("0"))
{
PrintWriter out = response.getWriter();
out.println("<script language='javascript'>alert('对不起,您还没有登录系统,没有下载的权限!');</script>");
return;
}
if (idBean==null||idBean.getUserLev().equals("0"))
{
PrintWriter out = response.getWriter();
out.println("<script language='javascript'>alert('对不起,您还没有登录系统,没有下载的权限!');</script>");
return;
}
- JSF点滴积累--通用文件下载函数
- JSF点滴积累--DataModel类
- JSF点滴积累--Dynamic JSF subviews
- JSF点滴积累-Overriding The JSF Renderers
- 通用文件下载函数
- JSF点滴积累--服务端重定向
- JSF点滴积累--初始值的设定
- JSF点滴积累--使用Tinymce的HTML编辑器
- JSF点滴积累--页面间参数的传递
- JSF点滴积累--使用Shale实现客户端验证步骤
- JSF点滴积累--利用PhaseListener实现权限验证
- jsf文件下载
- jsf 实现文件下载
- JSF 文件下载
- JSF 文件下载
- jsf 文件下载
- JSF点滴积累-- JSF的地址栏的路径与当前的真实路径不一致?
- JSF文件上传与下载
- 16进制文件(HEX)转2进制文件(BIN)小结
- 瑞星病毒及木马预警一周播报(2008.01.21-01.27)
- PHP与正则表达式 2 :一些修饰符与preg_match_all
- 也谈SUN收购MySQL
- 首次使用CSDN博客&决定参加微软IC挑战一下
- JSF点滴积累--通用文件下载函数
- 用google做开源的主机
- exosip
- 信息安全从业参考
- ANSI控制码的说明
- 批处理修改网络打印机端口的主机地址
- C# USB转串口突然拔出检测解决方案
- 我的BLOG的访问题已经达到10万!
- webwork.action-request,session,response