站在JAVA岛上看海

天行键,君子以自强不息;地势坤,君子以厚德载物!

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
zhoubin_java的公告
1、有的文章是从网上down来的,我再发上来是本着资源共享的原则,望原创作者谅解。如果有侵权行为,请留言给我,我会及时撤走文章!<br>2、希望你能够在我的博客得到你想到的东西,如果没有找到,请留言给我,我会尽力帮你,并尽快发上来!<BR> <CENTER><!--START TODAY--> <SCRIPT language=JavaScript> var bsYear; var bsDate; var bsWeek; var arrLen=8; //数组长度 var sValue=0; //当年的秒数 var dayiy=0; //当年第几天 var miy=0; //月份的下标 var iyear=0; //年份标记 var dayim=0; //当月第几天 var spd=86400; //每天的秒数 var year1999="30;29;29;30;29;29;30;29;30;30;30;29"; //354 var year2000="30;30;29;29;30;29;29;30;29;30;30;29"; //354 var year2001="30;30;29;30;29;30;29;29;30;29;30;29;30"; //384 var year2002="30;30;29;30;29;30;29;29;30;29;30;29"; //354 var year2003="30;30;29;30;30;29;30;29;29;30;29;30"; //355 var year2004="29;30;29;30;30;29;30;29;30;29;30;29;30"; //384 var year2005="29;30;29;30;29;30;30;29;30;29;30;29"; //354 var year2006="30;29;30;29;30;30;29;29;30;30;29;29;30"; var month1999="正月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2001="正月;二月;三月;四月;闰四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2004="正月;二月;闰二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月" var month2006="正月;二月;三月;四月;五月;六月;七月;闰七月;八月;九月;十月;十一月;十二月" var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十"; var Ys=new Array(arrLen); Ys[0]=919094400;Ys[1]=949680000;Ys[2]=980265600; Ys[3]=1013443200;Ys[4]=1044028800;Ys[5]=1074700800; Ys[6]=1107878400;Ys[7]=1138464000; var Yn=new Array(arrLen); //农历年的名称 Yn[0]="己卯年";Yn[1]="庚辰年";Yn[2]="辛巳年"; Yn[3]="壬午年";Yn[4]="癸未年";Yn[5]="甲申年"; Yn[6]="乙酉年";Yn[7]="丙戌年"; var D=new Date(); var yy=D.getYear(); var mm=D.getMonth()+1; var dd=D.getDate(); var ww=D.getDay(); if (ww==0) ww="<font color=RED>星期日</font>"; if (ww==1) ww="星期一"; if (ww==2) ww="星期二"; if (ww==3) ww="星期三"; if (ww==4) ww="星期四"; if (ww==5) ww="星期五"; if (ww==6) ww="<font color=green>星期六</font>"; ww=ww; var ss=parseInt(D.getTime() / 1000); if (yy<100) yy="19"+yy; for (i=0;i<arrLen;i++) if (ss>=Ys[i]){ iyear=i; sValue=ss-Ys[i]; //当年的秒数 } dayiy=parseInt(sValue/spd)+1; //当年的天数 var dpm=year1999; if (iyear==1) dpm=year2000; if (iyear==2) dpm=year2001; if (iyear==3) dpm=year2002; if (iyear==4) dpm=year2003; if (iyear==5) dpm=year2004; if (iyear==6) dpm=year2005; if (iyear==7) dpm=year2006; dpm=dpm.split(";"); var Mn=month1999; if (iyear==2) Mn=month2001; if (iyear==5) Mn=month2004; if (iyear==7) Mn=month2006; Mn=Mn.split(";"); var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十"; Dn=Dn.split(";"); dayim=dayiy; var total=new Array(13); total[0]=parseInt(dpm[0]); for (i=1;i<dpm.length-1;i++) total[i]=parseInt(dpm[i])+total[i-1]; for (i=dpm.length-1;i>0;i--) if (dayim>total[i-1]){ dayim=dayim-total[i-1]; miy=i; } bsWeek=ww; bsDate=yy+"年"+mm+"月"; bsDate2=dd; bsYear="农历"+Yn[iyear]; bsYear2=Mn[miy]+Dn[dayim-1]; if (ss>=Ys[7]||ss<Ys[0]) bsYear=Yn[7]; function time(){ document.write("<table border='0' style='font-size: 9pt; font-family:Tahoma;background:infobackground' cellspacing='0' width='90' bordercolor='red' height='110' cellpadding='0'"); document.write("<tr><td align='center' style='border: 1 solid #FFCC66;padding-top:4px'><b><font style='font-family: Verdana;color:#0979C4'>"+bsDate+"</font><br><div style='font-family: Arial Black;font-size:18pt;color:#FF8040'>"+bsDate2+"</div><div style='FONT-SIZE: 10.5pt;color:#000000'>"); document.write(bsWeek+"</div>"+"</b><font color=#9B4E00>"); document.write(bsYear+"<br>"+bsYear2+"</td></tr></table>"); } </SCRIPT> <DIV id=clock style="RIGHT: 10px; TOP: 5px"> <SCRIPT language=JavaScript>time()</SCRIPT> </DIV><BR><!--END TODAY--></CENTER><BR><EMBED src=http://bbs.smgbb.cn/Skins/Default/clock.swf width=150 height=150 menu="false" loop="true" quality="high" wmode="transparent"><BR><EMBED src=http://www.chinasunbelt.com/clock.swf width=150 height=150 menu="false" loop="true" quality="high" wmode="transparent"></CENTER><BR> <CENTER><B>我的联系方式:</B></CENTER><IMG height=20 src="http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_QQ.gif" width=20>38603688<BR> <P><IMG height=20 src="http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_email.jpg" width=20><a href="mailto:mail.zhoubin@163.com">mail.zhoubin@163.com</a></P><BR> <TABLE height=179 cellSpacing=1 width=40 background=http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_star.gif border=0> <TBODY> <TR> <TD width=179 height=5> <P align=center><IMG height=56 src="http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_welcome.gif" width=164 border=0></P></TD></TR> <TR> <TD width=179 height=99><IMG height=149 src="http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_moon.gif" width=167 border=0></TD></TR> <TR> <TD width=179 height=71><IMG height=93 src="http://blog.csdn.net/images/blog_csdn_net/shaohui/60135/o_huanyinglai.gif" width=154 border=0></TD></TR></TBODY></TABLE><BR> <SCRIPT>var s="http://www.google.com/search?hl=zh-CN&lr=lang_zh-CN&q=";</SCRIPT> <DIV align=center><IMG src="http://blog.csdn.net/images/blog_csdn_net/ylfly/37912/o_google's_logo.gif" border=0> <INPUT size=16 name=search> <INPUT onclick=window.open(s+document.all.search.value) type=button value=搜索 name=google></DIV></SCRIPT><BR><!-- Blog日历表开始 --> <SCRIPT language=javascript> var diarydays="<2004-08-05><2004-08-09><2004-08-12><2004-08-17><2004-08-19><2004-07-14><2004-07-13><2004-07-08><2004-07-05><2004-07-04><2004-07-03><2004-06-27><2004-06-26><2004-06-25>"; </SCRIPT> <STYLE>.calendarBigBorder { BORDER-RIGHT: #999 1px dotted; BORDER-TOP: #999 1px dotted; FONT-SIZE: 9pt; BORDER-LEFT: #999 1px dotted; WIDTH: 170px; BORDER-BOTTOM: #999 1px dotted; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; BACKGROUND-COLOR: #ffffff; TEXT-DECORATION: none } .calendarTd { FONT-SIZE: 9pt; WIDTH: 11%; COLOR: #000000; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #eeeeee; TEXT-ALIGN: center } .calendarMInput { BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #666666 1px solid; WIDTH: 19px; COLOR: #0099ff; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 15px; BACKGROUND-COLOR: #ffffff; TEXT-DECORATION: none } .calendarYInput { BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #666666 1px solid; WIDTH: 34px; COLOR: #0099ff; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 15px; BACKGROUND-COLOR: #ffffff; TEXT-DECORATION: none } .calendarMonthTitle { BORDER-TOP-WIDTH: 1px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 1px; FONT-SIZE: 9pt; BORDER-LEFT-COLOR: #999999; COLOR: #333333; BORDER-TOP-COLOR: #999999; BORDER-BOTTOM: #999999 1px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 24px; BACKGROUND-COLOR: #eeeeee; TEXT-ALIGN: center; BORDER-RIGHT-WIDTH: 1px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #999999 } .calendarNow { FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #c0c9d3; TEXT-ALIGN: center } .calendarDaySat { FONT-SIZE: 9pt; WIDTH: 12%; COLOR: #333333; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #eeeeee; TEXT-ALIGN: center; TEXT-DECORATION: none } .calendarDaySun { FONT-SIZE: 9pt; WIDTH: 12%; COLOR: #333333; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #eeeeee; TEXT-ALIGN: center; TEXT-DECORATION: none } .calendarLink { FONT-WEIGHT: normal; FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #e7e7f6; TEXT-ALIGN: center; TEXT-DECORATION: none } .categoryTxt { FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 23px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif", "宋体"; TEXT-DECORATION: none } .categoryTable { BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #71b99c 1px solid; BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT-STYLE: none } </STYLE> <SCRIPT language=JavaScript> var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); var days = new Array("日","一", "二", "三","四", "五", "六"); var classTemp; var calendarHover="calendarHover"; var today=new getToday(); var year=today.year; var month=today.month; var newCal; //得到某月天数 function getDays(month, year) { if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28; else return daysInMonth[month]; } //得到当天时间信息 function getToday() { this.now = new Date(); this.year = this.now.getFullYear(); this.month = this.now.getMonth(); this.day = this.now.getDate(); } //生成日历 function Calendar() { newCal = new Date(year,month,1); //当前月的第一天 today = new getToday(); var day = -1; //用来判断日历中是否为当天 var startDay = newCal.getDay(); //当月开始时间 var endDay=getDays(newCal.getMonth(), newCal.getFullYear());//当月结束时间 var daily = 0; //用来生成日历中的天数值 if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth())) day = today.day; var caltable = document.all.caltable.tBodies.calendar; //得到日历表格的集合 var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear()); //得到当月天数 //生成日历 for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++) for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++) { var cell = caltable.rows[intWeek].cells[intDay]; //得到单元袼 //生成字符串用于判断当天是否有日志 var montemp=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); if ((intDay == startDay) && (0 == daily)){ daily = 1;} var daytemp=daily<10?("0"+daily):(daily); var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">"; //选择样式 if(day==daily) cell.className="calendarNow"; else if(diarydays.indexOf(d)!=-1) cell.className="calendarLink"; else if(intDay==6) cell.className = "calendarDaySat"; else if (intDay==0) cell.className ="calendarDaySun"; else cell.className="calendarTd"; //生成值 if ((daily > 0) && (daily <= intDaysInMonth)) { cell.innerText = daily; daily++; } else cell.innerText = ""; } document.all.year.value=year; document.all.month.value=month+1; } function subMonth() { if ((month-1)<0) { month=11; year=year-1; } else { month=month-1; } Calendar(); } function addMonth() { if((month+1)>11) { month=0; year=year+1; } else { month=month+1; } Calendar(); } //得到响应事件 function getDiary() { var mon=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); var day=event.srcElement.innerText<10?("0"+event.srcElement.innerText):(event.srcElement.innerText); var d="<"+newCal.getFullYear()+"-"+mon+"-"+day+">"; if ("TD" == event.srcElement.tagName) if (("" != event.srcElement.innerText)&&(diarydays.indexOf(d)!=-1)) { diary.location="/foxmail/archive/"+newCal.getFullYear()+"/"+mon+"/"+day+".aspx"; window.location.href = diary.location; } } function setDate() { if (document.all.month.value<1||document.all.month.value>12) { alert("月的有效范围在1-12之间!"); return; } year=Math.ceil(document.all.year.value); month=Math.ceil(document.all.month.value-1); Calendar(); } </SCRIPT> <TABLE class=calendarBigBorder id=caltable cellSpacing=1 cellPadding=0 width=200 border=0> <THEAD> <TR vAlign=center align=middle> <TD class=calendarMonthTitle colSpan=7><INPUT class=calendarYInput onpaste="this.value=this.value.replace(/[^0-9]/g,'')" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" maxLength=4 size=3 name=year>年 <INPUT class=calendarMInput onpaste="this.value=this.value.replace(/[^0-9]/g,'')" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" maxLength=2 size=1 name=month>月 [<A onclick=addMonth() href="javascript:;">下月</A>] [<A onclick=subMonth() href="javascript:;">上月</A>]</TD></TR> <TR vAlign=center align=middle> <SCRIPT language=JavaScript> document.write("<TD class=calendarDaySun id=diary>" + days[0] + "</TD>"); for (var intLoop = 1; intLoop < days.length-1; intLoop++) document.write("<TD class=calendarTd id=diary>" + days[intLoop] + "</TD>"); document.write("<TD class=calendarDaySat id=diary>" + days[intLoop] + "</TD>"); </SCRIPT> </TR></THEAD> <TBODY onmouseup=document.selection.empty() oncontextmenu="return false" onselectstart="return false" id=calendar ondragstart="return false" onbeforecopy="return false" onclick=getDiary() oncopy=document.selection.empty() align=middle onselect="document.selection.empty()" cellpadding="0" cellspacing="0" border="1"> <SCRIPT language=JavaScript> for (var intWeeks = 0; intWeeks < 6; intWeeks++) { document.write("<TR style='cursor:hand'>"); for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=calendarTd onMouseover='{classTemp=this.className;this.className=calendarHover}' onMouseOut='this.className=classTemp'></TD>"); document.write("</TR>"); } </SCRIPT> </TBODY></TABLE> <SCRIPT language=JavaScript> Calendar(); </SCRIPT> <!-- Blog日历表结束 --><BR> <IFRAME border=0 align=center marginWidth=0 marginHeight=0 src='http://appnews.qq.com/cgi-bin/news_qq_search?city=' frameBorder=0 width=157 scrolling=no height=240 allowTransparency></IFRAME><br>
文章分类
JAVA编程
JAVA中文站(RSS)
SUN中国技术社区(RSS)
中国大学生JAVA/Solaris协会(RSS)
JSP编程
中国JSP技术网站(RSS)
常用网站
黑咖啡屋(RSS)
软件下载
天地无忧论坛(RSS)
注册码搜索(RSS)
软件万花筒(RSS)
音乐在线
音乐视听2000
存档

原创  UploadBean开发者指南 收藏

<选自官方http://www.javazoom.net/jzservlets/uploadbean/documentation_cn/developerguide.html#max>
UploadBean
是用于文件上载的组件(JAVA component),你可以将上载的文件保存在服 务器的文件夹下或打包成ZIP文件保存在文件夹下,你还可以将文件保存在数据库中 或内存中。这份文档是面向开发者的,我们假设你已经了解一些组件JavaBeans和JSP 技术并且知道什么是组件作用"范围"(page, session, application)。
首先你需要选择存储模式:[Folder] [ZIP Archive] [Database] [Memory]。 此后你可以通 [setStoreModel] 方法进行切换。其次,你可以增加一些限定条件,比如:[blacklist] ,
[whitelist], [file size limit], [maximum]上载文件大小。存储上载的文件你需要调用 [MultipartFormDataRequest] 对象的[store]方法。( [overwrite] 选项用于处理重复上载文件)。 最后,如果有必要你可以[reset]存储空间。当文件上载时实现[UploadListener]接口的类 可以接收到文件上载事件。上载文件的信息保存在[history] 中(非二进制文件)。UploadBean 支持两种解析器,你可以通过 [parser] 属性进行设置。

  Folder :

UploadBean 可以将文件上载到服务器的任意目录或文件夹下,Servlet引擎 必须有对该文件夹和目录的读写权限。

设置文件夹存储模式:

  • public void setFolderstore(String serverfolder)
    参数:文件夹的完全路径 (e.g. /usr/uploads)。
    如果文件夹不存在系统将创建一个空文件夹。

Win32 OS.下的一个例程。我们假设Servlets引擎对D:\Inetpub\uploads\ 有读写权限

<jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="folderstore"
   value="D:/Inetpub/uploads" />
</jsp:useBean>

Notes :
1 - Don't pay attention about "/" or "\" in path. UploadBean will use always use the good one.
2 - DO NOT add "/" or "\" at the end
3 -
A full sample is available through SimpleUpload.jsp

 ZIP Archive :

UploadBean 可以将文件保存在ZIP文件中。Servlets引擎必须有对包含该ZIP文件的文件夹 的读写权限。

设置ZIP存储模式:

  • public void setZipfilestore(String file)
    参数:ZIP文件的完全路径(e.g. /usr/upload/uploaded.zip).
    如果不存在系统将创建一个空ZIP文件。

Win32 OS.下的一个例程。我们假设Servlets引擎对D:\Inetpub\customers\ 有读写权限

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="zipfilestore"
   value="D:/Inetpub/customers/uploads.zip" />
</jsp:useBean>

Notes :
1 - Appending process could be slow because UploadBean need to create a temporary archive. Try to avoid big archives.
2 - Don't pay attention about "/" or "\" in path. UploadBean will use always use the good one.
3 -
A full sample is available through MultipleUploads.jsp

 Database :

UploadBean 可以将上载文件保存在任意支持长原始(long RAW)数据(例如: 二进制文件)。你需要一个表(UPLOADS),表中有三个字段:UPLOADID(主键) ,FILENAME(上载文件名),二进制数据(BINARYFILE)。你可以通过UploadBean类 的SQLUPLOAD* 公有静态成员变量更改表以及字段名字。

初始化JDBC连接 :

  • public void setDatabasestore(String driver, String URL, Properties credentials)
    参数:JDBC driver标识,JDBC URL ,其它连接属性(用户名/口令)。
    此方法将驱动程序装载到内存里,并建立一个数据库连接。
  • public void setDatabasestore(Connection jdbcconnection)
    参数:数据库连接名,该连接可以来自数据源(DataSource)或连接池。

替代数据库存储实现 :

  • public void setDatabasestoreimplementation(String newimpl)
    参数:扩展于DBStore的类名称。看下面的注解5

下面是一个关于Oracle的例程。假设ORCL是一个运行在mydbhost服务器(port 1521) 上的数据库实例(login=test, password=test)。一个与upload_oracle.sqlscript中所描述结构相同的表。 我们也假设你使用的是Oracle THIN JDBC driver.

<jsp:useBean id="upBean" scope="application" class="javazoom.upload.UploadBean">
<%
  Properties props = new Properties();
  props.put("user","test");
  props.put("password","test");
  upBean.setDatabasestore("oracle.jdbc.driver.OracleDriver",
  
 "jdbc:oracle:thin:@mydbhost:1521:ORCL", props);
%>
</jsp:useBean>

Notes :
1 - "scope=application" is recommended to avoid multiples database connections."scope=session is acceptable small amount of users. "scope=request" is not recommended without JDBC ConnectionPool.
2 - UploadBean won't close the database connection. You can do it when needed by calling :
upBean.getDatabasestore().close(
)
3 -
A full sample is available through DatabaseUpload.jsp

4 - For DB2 script see upload_db2.sql and or MySQL script see upload_mysql.sql
5 - If UploadBean database store does not suit to your needs then you could implement your own DBStore. A sample is available in add-ons section.

 Memory :

UploadBean 可以将上载的文件存储JVM内存中。已上载的文件将被存在一个"Vector"对象中。 这是一个"UploadFile"类型的Vector。 (更多信息看 API ).

设置内存存储模式:

  • public void setStoremodel(int storeid)
    参数:内存存储标识符(MEMORYSTORE),看下例。

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="storemodel"
   value="<%= UploadBean.MEMORYSTORE %>" />

</jsp:useBean>

Notes :
1 - Using memory store without "scope=session" or
"scope=application" is not really useful.
2 - You can access the memory store through upBean.getMemorystore().
3 - All data will be lost when the servlet engine stops (or crashes).

 Switch to another model :

切换存储模式。

  • public void setStoremodel(int storeid)
    参数:存储标识符...

例程

<some HTML ...
  <jsp:setProperty name="upBean" property="storemodel"
   value="<%= UploadBean.ZIPFILESTORE %>" />
... some HTML>

Note
:
- Each storemodel had to been initialized before swithing.


 Blacklist:

UploadBean 可以通过一个黑名单(blacklist)过滤上载的文件。黑名单中包含 你拒绝上载的文件名列表。如果上载列表中的文件,UploadBean将包抛出一个异常

初始化黑名单:

  • public void setBlacklist(String list)
    参数:以逗号分割的文件名列表。

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="blacklist"
   value="*.zip,*.rar,setup.exe" />

</jsp:useBean>


 Whitelist:

UploadBean 可以通过一个白名单(whitelist)过滤上载的文件。白名单中包含 可以上载的文件名列表。如果上载列表以外的文件UploadBean将抛出一个异常。 一个空的白名单将意味这你不能上载任何文件。黑名单和白名单不能同时使用 。默认是空的黑名单,这意味着所用文件被允许上载。

初始化白名单:

  • public void setWhitelist(String list)
    参数:以逗号分割的文件名列表。

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="whitelist" value="*.ogg,*.mp3" />

</jsp:useBean>


 Overwrite :

UploadBean 可以检查出上载的文件是否重复,或覆盖或作为一个新的文件保存下来 (新文件名=原文件名+随机数)

设置覆盖机能是否有效:

  • public void setOverwrite(boolean enable)
    参数:默认值为false,覆盖无效

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="overwrite"
   value="true" />

</jsp:useBean>


 File size limit:

UploadBean 可以限制上载文件的大小(单位:字节)。如果上载文件大小超 过限制的大小UploadBean将抛出一个异常

限制上载文件大小

  • public void setFilesizelimit(int sizelimitinbytes)
    参数:文件大小限制(单位:字节)默认值:50MB.

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="filesizelimit"
   value="1048576" />

</jsp:useBean>


 Maximum uploaded files for a store :

UploadBean 可以限制上载文件数量。超过此限制UploadBean将抛出一个异常。


设置最大上载文件数量

  • public void setMaxfiles(int amountallowed)
    参数:最大上载文件数。默认值:100

例程

<jsp:useBean id="upBean" scope="session" class="javazoom.upload.UploadBean">
  <jsp:setProperty name="upBean" property="maxfiles"
   value="10" />

</jsp:useBean>


 Store methods :

UploadBean 将上载的文件从MultipartFormDataRequest对象中抽出,存储到已指定 的存储空间中。存储之前UploadBean将检查所有的限定条件。


保存上载文件:

  • public void store(MultipartFormDataRequest mrequest, String field)
    参数:MultipartFormDataRequest对象名,表单中file类型的控件名
  • public void store(MultipartFormDataRequest mrequest)
    参数:MultipartFormDataRequest对象。UploadBean将保存对象中所有的有效文件。

例程

<%
  
if (MultipartFormDataRequest.isMultipartFormData(request))
  {
      // Uses MultipartFormDataRequest to parse the HTTP request.
      MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
      upBean.store(mrequest);
  }
%>

Notes :
1 - UploadBean will not save anything if you don't call this method
.
2 - In the example above, request is the implicit HttpServletRequest object.
3 - Store is synchronized for ZIP Archive so don't worry about file locking.


 MultipartFormDataRequest :

UploadBean 从MultipartFormDataRequest实例中抽取出上载的文件。这个类 从HTML表单中以"multipart/form-data"编码形式抽取数据。你需要设置你的 表单编码形式为"multipart/form-data" 。你不能用enctype="application/x-www-form-urlencoded"设置编码。

MultipartFormData不是UploadBean的核心,除了从表单中抽取参数和数值外,你不需要过 多的关心它。看API 学习更多的信息。

例程

<%
   if (MultipartFormDataRequest.isMultipartFormData(request))
   {
       // Uses MultipartFormDataRequest to parse the HTTP request.
       MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
       String todo = mrequest.getParameter("todo");
       if ( (todo != null) && (todo.equalsIgnoreCase("upload")) )
       {
          ...
%>

Notes :
1 - In the example above, request is the implicit HttpServletRequest object.
2 - In addition to parser property you could select the multipart parser through the MultipartFormDataRequest constructor.


 Reset a store :

UploadBean 可以重设存储空间中的内容。对于数据库存储模式它将删除所有 记录。对于ZIP文件存储模式它将ZIP文件清空。对于文件夹存储模式它将删除 所有文件。对与内存存储模式它将清空内存。

重新设置存储空间中的内容:

  • public void resetStore()
    无参数

例程

<%
   upBean.resetStore();
%>


 UploadListener :

UploadBean 会通知监听器当上载的文件通过了限制条件检查并且已经保存。该监听器实 现UploadListener接口。传入的参数是一个UploadParameters类的实例,里面 包含了上载文件的信息(fileUploaded方法)

注册监听器:

  • public void addUploadListener(UploadListener listener)
    参数:监听器实例

例程

some Java code
   ...
   myListener lst=new myListener();
   upBean.addUploadListener(lst);
   ...


 History :

UploadBean 跟踪所有已上载文件的信息(filename, filesize,content-type, storemodel, storeinfo)。你可以得到上载的历史纪录,一个UploadParameters类型的 Vector。
得到上载历史纪录:

  • public Vector getHistory()
    无参数

例程

<%
    Vector history = upBean.getHistory();
    for (int i=0;i<history.size();i++)
    {
        UploadParameters up = (UploadParameters) history.elementAt(i);
        out.println("<li>Uploaded file : "+up.getFilename()+" ("+up.getFilesize()+
        "bytes)"+"<BR> Content Type : "+up.getContenttype());
        out.println("<BR>StoreModel : "+up.getStoremodelname()+
        " ("+up.getStoreinfo()+")");
    }
%>

 Parser :

UploadBean 支持两种解析器(multipart parsers):cos and struts。你可以通过 parser属性来选择一种。 默认为cos.

选择和设置解析器:

  • public void setParser(String parserid)
    参数:解析器标识符
    MultipartFormDataRequest.COSPARSER 和
    MultipartFormDataRequest.STRUTSPARSER.
  • public void setParsertmpdir(String tmpdir)
    Input 参数:允许选择的临时目录(cache) 仅对Struts解析器有效。

Struts 解析器例程

<jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" >
  <jsp:setProperty name="upBean" property="folderstore" value="D:/uploads"/>
  <jsp:setProperty name="upBean" property="parser"
    value="<%= MultipartFormDataRequest.STRUTSPARSER %>"/>
  <jsp:setProperty name="upBean" property="parsertmpdir" value="D:/temp"/>
</jsp:useBean>

发表于 @ 2005年10月15日 16:16:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Session详解 | 新一篇:殊途同归 四个程序员的一天

  • 发表评论
  • 评论内容:
  •  
Copyright © zhoubin_java
Powered by CSDN Blog