??xml version="1.0" encoding="utf-8" standalone="yes"?>
q个cd装了一个上传文件的所有信息。通过它,可以得到上传文g的文件名、文件大、扩展名、文件数据等信息?
FilecM要提供以下方法:
1、saveAs作用Q将文g换名另存?
原型Q?
public void saveAs(java.lang.String destFilePathName)
?
public void saveAs(java.lang.String destFilePathName, int optionSaveAs)
其中QdestFilePathName是另存的文g名,optionSaveAs是另存的选项Q该选项有三个|分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALQSAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系l的根目录ؓ文g根目录另存文ӞSAVEAS_VIRTUAL表明以Web应用E序的根目录为文件根目录另存文gQSAVEAS_AUTO则表Clg军_Q当Web应用E序的根目录存在另存文g的目录时Q它会选择SAVEAS_VIRTUALQ否则会选择SAVEAS_PHYSICAL?
例如QsaveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文g名实际是c:\upload\sample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用E序的根目录是webapps/jspsmartuploadQ则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用E序根目录下存在upload目录Q则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)Q否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)?
Q对于WebE序的开发来_最好用SAVEAS_VIRTUALQ以便移植?
2、isMissing
作用Q这个方法用于判断用h否选择了文Ӟ也即对应的表单项是否有倹{选择了文件时Q它q回false。未选文件时Q它q回true?
原型Qpublic boolean isMissing()
3、getFieldName
作用Q取HTML表单中对应于此上传文件的表单的名字?
原型Qpublic String getFieldName()
4、getFileName
作用Q取文g名(不含目录信息Q?
原型Qpublic String getFileName()
5、getFilePathName
作用Q取文g全名Q带目录Q?
原型Qpublic String getFilePathName
6、getFileExt
作用Q取文g扩展名(后缀Q?
原型Qpublic String getFileExt()
7、getSize
作用Q取文g长度Q以字节计)
原型Qpublic int getSize()
8、getBinaryData
作用Q取文g数据中指定位Ud的一个字节,用于文件等处理?
原型Qpublic byte getBinaryData(int index)。其中,index表示位移Q其值在0到getSize()-1之间?
?Filesc?
q个c表C所有上传文件的集合Q通过它可以得C传文件的数目、大等信息。有以下ҎQ?
1、getCount
作用Q取得上传文件的数目?
原型Qpublic int getCount()
2、getFile
作用Q取得指定位Ud的文件对象FileQ这是com.jspsmart.upload.FileQ不是java.io.FileQ注意区分)?
原型Qpublic File getFile(int index)。其中,index为指定位U,其值在0到getCount()-1之间?
3、getSize
作用Q取得上传文件的总长度,可用于限制一ơ性上传的数据量大?
原型Qpublic long getSize()
4、getCollection
作用Q将所有上传文件对象以Collection的Ş式返回,以便其它应用E序引用Q浏览上传文件信息?
原型Qpublic Collection getCollection()
5、getEnumeration
作用Q将所有上传文件对象以EnumerationQ枚举)的Ş式返回,以便其它应用E序览上传文g信息?
原型Qpublic Enumeration getEnumeration()
?Requestc?
q个cȝ功能{同于JSP内置的对象request。只所以提供这个类Q是因ؓ对于文g上传表单Q通过request对象无法获得表单的|必须通过jspSmartUploadlg提供的Request对象来获取。该cL供如下方法:
1、getParameter
作用Q获取指定参C倹{当参数不存在时Q返回gؓnull?
原型Qpublic String getParameter(String name)。其中,name为参数的名字?
2、getParameterValues
作用Q当一个参数可以有多个值时Q用此方法来取其倹{它q回的是一个字W串数组。当参数不存在时Q返回gؓnull?
原型Qpublic String[] getParameterValues(String name)。其中,name为参数的名字?
3、getParameterNames
作用Q取得Request对象中所有参数的名字Q用于遍历所有参数。它q回的是一个枚丑֞的对象?
原型Qpublic Enumeration getParameterNames()
?SmartUploadc这个类完成上传下蝲工作?
AQ上传与下蝲q的方法:
只有一个:initialize?
作用Q执行上传下载的初始化工作,必须W一个执行?
原型Q有多个Q主要用下面这个:
public final void initialize(javax.servlet.jsp.PageContext pageContext)
其中QpageContext为JSP面内置对象Q页面上下文Q?
BQ上传文件用的ҎQ?
1、upload
作用Q上传文件数据。对于上传操作,W一步执行initializeҎQ第二步p执行q个Ҏ?
原型Qpublic void upload()
2、save
作用Q将全部上传文g保存到指定目录下Qƈq回保存的文件个数?
原型Qpublic int save(String destPathName)
和public int save(String destPathName,int option)
其中QdestPathName为文件保存目录,optionZ存选项Q它有三个|分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同FilecȝsaveAsҎ的选项之值类|SAVE_PHYSICAL指示lg文件保存到以操作系l根目录为文件根目录的目录下QSAVE_VIRTUAL指示lg文件保存到以Web应用E序根目录ؓ文g根目录的目录下,而SAVE_AUTO则表C由lg自动选择?
注:save(destPathName)作用{同于save(destPathName,SAVE_AUTO)?
3、getSize
作用Q取上传文g数据的总长?
原型Qpublic int getSize()
4、getFiles
作用Q取全部上传文gQ以Files对象形式q回Q可以利用Filescȝ操作Ҏ来获得上传文件的数目{信息?
原型Qpublic Files getFiles()
5、getRequest
作用Q取得Request对象Q以便由此对象获得上传表单参C倹{?
原型Qpublic Request getRequest()
6、setAllowedFilesList
作用Q设定允怸传带有指定扩展名的文Ӟ当上传过E中有文件名不允许时Q组件将抛出异常?
原型Qpublic void setAllowedFilesList(String allowedFilesList)
其中QallowedFilesList为允怸传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文gQ可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,")允怸传带doc和txt扩展名的文g以及没有扩展名的文g?
7、setDeniedFilesList
作用Q用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限Ӟ则上传时lg抛出异常?
原型Qpublic void setDeniedFilesList(String deniedFilesList)
其中QdeniedFilesList为禁止上传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想止上传那些没有扩展名的文gQ可以用两个逗号来表C。例如:setDeniedFilesList("exe,bat,,")禁止上传带exe和bat扩展名的文g以及没有扩展名的文g?
8、setMaxFileSize
作用Q设定每个文件允怸传的最大长度?
原型Qpublic void setMaxFileSize(long maxFileSize)
其中QmaxFileSizeZؓ每个文g允许上传的最大长度,当文件超出此长度Ӟ不被上传?
9、setTotalMaxFileSize
作用Q设定允怸传的文g的总长度,用于限制一ơ性上传的数据量大?
原型Qpublic void setTotalMaxFileSize(long totalMaxFileSize)
其中QtotalMaxFileSize为允怸传的文g的总长度?
CQ下载文件常用的Ҏ
1、setContentDisposition
作用Q将数据q加到MIME文g头的CONTENT-DISPOSITION域。jspSmartUploadlg会在q回下蝲的信息时自动填写MIME文g头的CONTENT-DISPOSITION域,如果用户需要添加额外信息,L此方法?
原型Qpublic void setContentDisposition(String contentDisposition)
其中QcontentDispositiond的数据。如果contentDisposition为nullQ则lg自动添?attachment;"Q以表明下载的文g作ؓ附gQ结果是IE览器将会提C另存文Ӟ而不是自动打开q个文gQIE览器一般根据下载的文g扩展名决定执行什么操作,扩展名ؓdoc的将用wordE序打开Q扩展名为pdf的将用acrobatE序打开Q等{)?
2、downloadFile
作用Q下载文件?
原型Q共有以下三个原型可用,W一个最常用Q后两个用于Ҏ情况下的文g下蝲Q如更改内容cdQ更改另存的文g名)?
?public void downloadFile(String sourceFilePathName)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名)
?public void downloadFile(String sourceFilePathName,String contentType)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别)?
?public void downloadFile(String sourceFilePathName,String contentType,String destFileName)
其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别),destFileNameZ载后默认的另存文件名?
]]>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){//l定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
//讄面不缓?BR>response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创徏图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取囑Ş上下?BR>Graphics g = image.getGraphics();
//生成随机c?BR>Random random = new Random();
// 讑֮背景?BR>g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//讑֮字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边?BR>//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线Q图象中的认证码不易被其它E序探测?BR>g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随Z生的认证?4位数?
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 认证码昄到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近Q所以只能直接生?BR> g.drawString(rand,13*i+6,16);
}
// 认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页?BR>ImageIO.write(image, "JPEG", response.getOutputStream());
%>
---------------使用验证码图片的文g---------a.jsp------------------------------------
<%@ page contentType="text/html;charset=gb2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>认证码输入页?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<form method=post action="check.jsp">
<table>
<tr>
<td align=left>pȝ产生的认证码Q?lt;/td>
<td><img border=0 src="image.jsp"></td>
</tr>
<tr>
<td align=left>输入上面的认证码Q?lt;/td>
<td><input type=text name=rand maxlength=4 value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交?></td>
</tr>
</form>
</body>
</html>
-----------------验证的页?---------check.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>认证码验证页?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<%
String rand = (String)session.getAttribute("rand");
String input = request.getParameter("rand");
%>
pȝ产生的认证码为: <%= rand %><br>
您输入的认证码ؓQ?<%= input %><br>
<br>
<%
if (rand.equals(input)) {
%>
<font color=green>输入相同Q认证成功!</font>
<%
} else {
%>
<font color=red>输入不同Q认证失败!</font>
<%
}
%>
</body>
</html>
public CodeFilter()
{
}
public static String toHtml(String s)
{
if(s == null)
{
s = "";
return s;
} else
{
s = Replace(s, "&", "&");
s = Replace(s, "<", "<");
s = Replace(s, ">", ">");
s = Replace(s, "\t", " ");
s = Replace(s, "\r\n", "\n");
s = Replace(s, "\n", "<br>");
s = Replace(s, " ", " ");
s = Replace(s, "'", "'");
s = Replace(s, "\\", "\");
return s;
}
}
public static String unHtml(String s)
{
s = Replace(s, "<img src='", "<img src='");
s = Replace(s, "'>", "'>");
s = Replace(s, "<center>", "<center>");
s = Replace(s, "</center>", "</center>");
return s;
}
public static String Replace(String s, String s1, String s2)
{
StringBuffer stringbuffer = new StringBuffer();
int i = s.length();
int j = s1.length();
int k;
int l;
for(k = 0; (l = s.indexOf(s1, k)) >= 0; k = l + j)
{
stringbuffer.append(s.substring(k, l));
stringbuffer.append(s2);
}
if(k < i)
stringbuffer.append(s.substring(k));
return stringbuffer.toString();
}
}