大家可以根据自己的实际情况进行修改,特别是数据库操作部分。============================================利用稻香老农的无组件进行多文件上传 请见:http://bbs.blueidea.com/viewthread.php?tid=1249535==================================================本例属于文件和表单项的混合提交。简单说明:虽然重点在处理页上,但我觉得有必要介绍一下表单的项目。本例是相册里像片的上传。其中的groupID是隐藏域传递的大类的ID其中的albumID是隐藏域传递的小类的IDfile1-->>file5是文件photoTitle1-->>photoTitle5 是像片的标题photoIntro1-->>photoIntro5 是像片的简介photoWidth1-->>photoWidth5 是像片的宽度photoHeight1-->>photoHeigth5 是像片的高度photoSize1-->>photoSize5 是像片的大小。注意:因本人没有声明变量的习惯,所以大家要是强制声明变量的话,就得自己加了。===========================================提交页:主要代码如下<form name="fileForm" method="post" action="photo_savephoto.asp" enctype="multipart/form-data" onSubmit="return checkForm();"><INPUT name="groupID" type="hidden" id="groupID" value="<%=groupID%>" size="10"><INPUT name="albumID" type="hidden" id="albumID" value="<%=albumID%>" size="10"> 上传说明:最多可以同时上传五个文件,其中标题最多30字,简介200字。<table width="96%" align="center" cellpadding="4" cellspacing="2"> <tr align="center" valign="middle"> <td align="left" bgcolor="#F4CECE" id="upid">文件1</td> <td height="29" align="left" bgcolor="#F4CECE" id="upid"> <INPUT name="file1" type="file" class="myInput" size="20"> 宽: <INPUT name="photoWidth1" type="text" class="input-disabled" id="photoWidth1" size="5" readonly=""> 高: <INPUT name="photoHeight1" type="text" class="input-disabled" id="photoHeight1" size="5" readonly=""> 大小:<INPUT name="fileSize1" type="text" class="input-disabled" id="fileSize1" size="5" readonly=""> </td> </tr> <tr align="center" valign="middle"> <td colspan="2" align="left" bgcolor="#FDF2F2" id="upid"> 标题: <INPUT name="photoTitle1" type="text" class="myInput" id="photoTitle1" size="40"> <BR> 简介:<TEXTAREA name="photoIntro1" cols="60" rows="5" class="myInput" id="photoIntro1"></TEXTAREA> </td> </tr>。。。。。。。 <tr align="center" valign="middle" bgcolor="#F4CECE"> <td height="24" colspan="2"> <input name="Submit" type="submit" class="myButton" value="开始上传"> <input name="Submit2" type="reset" class="myButton" value="重新填写"> </td> </tr> </table></form>下面的script是我用来检查图片属性的。其中检查了图片的宽度,高度,大小,是否是图片。<SCRIPT language="JavaScript"><!-- var upFileSize=<%=upFileSize%>;//--></SCRIPT><SCRIPT language="JavaScript" src="photo_addphoto.js"></SCRIPT><TABLE width="98%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;"> <TR> <TD height="1"><img src="images/add.gif" id="loadPhoto" onload="if(!firstLoad)showInfo();"></TD> </TR></TABLE>photo_addphoto.js
var firstLoad=true;
var mycount;
function checkForm()
{
var filePath;
var fileNumber=0; //想上传的文件个数
for(mycount=1;mycount<=5;mycount++)
if(eval("fileForm.file"+mycount+".value!=''")) //检查文件后缀、标题和简介
{
eval("filePath=fileForm.file"+mycount+".value;")
if(isPic(filePath,mycount)==false)
return false;
if(eval("fileForm.photoTitle"+mycount+".value==''") || eval("fileForm.photoTitle"+mycount+".value.length>30"))
{
alert("第"+mycount+"个相片的标题为空或超过30字!");
return false;
}
if(eval("fileForm.photoIntro"+mycount+".value==''") || eval("fileForm.photoIntro"+mycount+".value.length>200"))
{
alert("第"+mycount+"个相片的简介为空或超过200字!");
return false;
}
fileNumber++;
}
if(fileNumber==0)
{
alert("你没有选择任何一个图片文件!不能提交!");
return false;
}
return photoInfo(); //检查图片属性,提交表单
}
function photoInfo()
{
//fileForm.submit.disabled=true;
mycount=0;
photoInfo2(); //共执行5次photoInfo2()
for(var i=1;i<=4;i++)
{
setTimeout("photoInfo2()",i*500);
}
setTimeout("checkFileSize()",3000);
return false;
}
function photoInfo2()
{
firstLoad=false;
mycount++;
if(eval("fileForm.file"+mycount+".value!=''"))
eval("loadPhoto.src=fileForm.file"+mycount+".value;");
else
eval("fileForm.fileSize"+mycount+".value='no';");
}
function showInfo()
{
eval("fileForm.photoWidth"+mycount+".value=loadPhoto.offsetWidth;");
eval("fileForm.photoHeight"+mycount+".value=loadPhoto.offsetHeight;");
eval("fileForm.fileSize"+mycount+".value=loadPhoto.fileSize;");
}
function isPic(filePath,mycount){
var temp;
var ExtList = ".jpg.gif.bmp.png";
var the_ext = filePath.substr(filePath.lastIndexOf(".")+1).toLowerCase();
if (ExtList.indexOf(the_ext)==-1){
alert("第"+mycount+"个文件不是图片,请选择图片文件!");
return false;
}
return true;
}
function checkFileSize()
{
for(mycount=1;mycount<=5;mycount++)
if(eval("fileForm.fileSize"+mycount+".value")>upFileSize) //upFileSize 来自于photo_addphoto.asp
{
alert("第"+mycount+"个文件大于"+Math.round(upFileSize/1024)+" KB!");
return false;
}
fileForm.Submit.disabled=true;
fileForm.submit(); //提交表单
} 提示:您可以先修改部分代码再运行===============这里只写出了一个文件的相关输入框,其他四个类似。说明一点,并不是有5 个的限制,只是我这里只写了5个。其中的photo_addphoto.js在客户端对图片进行一遍检查,不是图片的会提示,大小超过限制的也会提示。这样就避免了用户经过耐心的等待后才被告诉不合标准的烦恼。=================================================处理页代码:<%@ CODEPAGE="936"%><%Server.ScriptTimeOut=5000 '--脚本超时设置为5000%><!--#include file="conn.asp" --><% Set oFileUp = Server.CreateObject("SoftArtisans.FileUp") '--建立SA FileUp Object'oFileUp.Path = Server.MapPath("/upfile/") '--我这里要自己定义文件名,所以没有使用Path属性,注意这句被注释掉了。strRestrictBy = "" '--文件验证方式,分为extension和ContentTypeiCount=0 '--文件上传数的计数变量formPath="upfile/" '文件保存位置'-----------检查是否有在此位置上传的权限-----------这里省略了。groupID=trim(oFileUp.form("groupID"))albumID=trim(oFileUp.form("albumID"))'-----------检查权限完成------if errMsg="" then '----如果到此还没有错误For Each strFormElement In oFileUp.Form If IsObject(oFileUp.Form(strFormElement)) Then '如果是文件 If Not oFileUp.Form(strFormElement).IsEmpty Then '--文件不为空 flagOK=1 '--不是文件或文件大于限制,设置错误信息 If oFileUp.Form(strFormElement).TotalBytes<100 Then flagOK=0 ElseIf oFileUp.Form(strFormElement).TotalBytes> upFileSize Then flagOK=0 errMsg=errMsg+"文件:"&oFileUp.Form(strFormElement).UserFileName&" 大于"&upFileSize1024&"KB!<br>" Else strShortFileName = mid(oFileUp.Form(strFormElement).UserFileName,InStrRev(oFileUp.Form(strFormElement).UserFileName, "")+1) '取得文件名 strExtension = Mid(strShortFileName, InStrRev(strShortFileName, ".")) '取得扩展名 If strRestrictBy = "extension" Then '--验证方式为扩展名 'strShortFileName = oFileUp.Form(strFormElement).ShortFileName '======检查后缀名==== Select Case LCase(strExtension) Case ".jpg", ".gif", ".bmp",".png" Case Else flagOK=0 oFileUp.Form(strFormElement).Delete Response.Write("<B>错误:</B> 扩展名为 <I>" & strExtension & "</I> 的文件不能被上传。<BR>") End Select Else '--验证方式为MIME类型 strContentType = oFileUp.Form(strFormElement).ContentType Select Case LCase(strContentType) Case "image/gif", "image/jpeg", "image/pjpeg" Case Else flagOK=0 oFileUp.Form(strFormElement).Delete Response.Write("<B>错误:</B> MIME类型为 <I>" & strContentType & "</I> 的文件不能被上传。<BR>") End Select End If '--end if 验证方式 End If 'end if 文件大小判断 If flagOK=1 Then '如果文件通过检查,保存文件,并插入数据库纪录 randomize ranNum=int(900*rnd)+100 filename=year(now())&month(now())&day(now())&hour(now())&minute(now())&second(now())&ranNum&LCase(strExtension) oFileUp.Form(strFormElement).SaveInVirtual formPath&filename '让文件名不重复,保存文件,这里用的是SaveInVirtual方法 '--输出服务器上的文件路径 Response.Write oFileUp.Form(strFormElement).ServerName & ":ServerName<BR>" '--输出客户端的文件路径 Response.Write "<BR><B>文件:</B>"&oFileUp.Form(strFormElement).UserFileName & "<BR>" '--输出该文件的大小 Response.Write "<B>大小:</B>"&oFileUp.Form(strFormElement).TotalBytes & "<BR>" '===添加文件的信息到数据库里=== myIndex=right(strFormElement,1) '--取得文件的序号,如file1则取得为1,file2取得为2 temp_photoTitle=oFileUp.form("photoTitle"+myIndex) '--这四行取得对应的标题,简介,宽度,高度 temp_photoIntro=oFileUp.form("photoIntro"+myIndex) temp_photoWidth=oFileUp.form("photoWidth"+myIndex) temp_photoHeight=oFileUp.form("photoHeight"+myIndex) '====检查输入,为空则给初值== temp_photoTitle=replace(trim(temp_photoTitle),"'","''") if temp_photoTitle="" then temp_photoTitle="没有填写" end if temp_photoIntro=replace(trim(temp_photoIntro),"'","''") if temp_photoIntro="" then temp_photoIntro="没有填写" end if if temp_photoWidth="" or not IsNumeric(temp_photoWidth) then temp_photoWidth=160 end if if temp_photoHeight="" or not IsNumeric(temp_photoHeight) then temp_photoHeight=120 end if '===插入数据库=== FileSize=oFileUp.Form(strFormElement).TotalBytes sql="insert into TBL_PHOTO(albumID,groupID,userName,addTime,photoFilename,photoTitle,photoIntro,photoClick,photoSize,photoWidth,photoHeight,locked,viewPassword) values("&albumID&","&groupID&",'"&session("userName")&"','"&Now()&"','"&filename&"','"&temp_photoTitle&"','"&temp_photoIntro&"',1,"&FileSize&","&temp_photoWidth&","&temp_photoHeight&",'no','')" conn.execute sql sql="update TBL_ALBUM set photoCount=photoCount+1 where albumID="&albumID conn.execute sql sql="update TBL_GROUP set photoCount=photoCount+1 where groupID="&groupID conn.execute sql '===输出上传成功信息=== iCount=iCount+1 End If Else Response.Write strFormElement & "对象为空!" End If '--end if 对象为空 End If '--end if 是否是文件NextSet oFileUp = Nothing '删除此对象end if '--end if 没有错误信息response.write "<br>"&iCount&" 个文件上传结束!"response.write "<br><a href='photo_listphoto.asp?albumID="&albumID&"'><B>返回相册</B></a>"'=====如果有错,输出错误信息===== if errMsg<>"" then response.write "<br>"&errMsg response.write "<INPUT type='button' onClick='history.go(-1)' value='返回' class='myInput'>"end ifconn.closeset conn=nothing%>===================================================看完了实例,下面对SA FileUP的属性和方法进行简单的介绍,免得大家初次接触感到发晕。这些是我觉得比较常用的,例句和注释都是按我的理解写的。如果大家在应用中发现有什么问题,请指出。谢谢。建立SA FileUp 对象的方法:Set oFileUp = Server.CreateObject("SoftArtisans.FileUp")取出表单所有项的方法:For Each strFormElement In oFileUp.Form 用 oFileUp.Form(strFormElement)就可以引用每个对象,文件也是这样 注意:如果是多选下拉框,则用oFileUp.FormEx(strFormElement) 可以这样来遍历它。 For Each strSubItem In oFileUp.FormEx(strFormElement) Response.Write( strSubItem & "<BR>") NextNextContentType属性:oFileUp.Form(strFormElement).ContentType可以得到文件的MIME类型IsEmpty属性oFileUp.Form(strFormElement).IsEmpty可以知道用户是不是指定了一个无效的文件MaxBytes属性oFileUp.Form(strFormElement).MaxBytes=30000指定文件的限制,单位为Byte,如果超过它,那么只存储MaxBytes指定的大小。其余舍弃。ServerName属性oFileUp.Form(strFormElement).ServerName可以得到文件保存到服务器的完整路径。ShortFilename属性oFileUp.Form(strFormElement).ShortFilename可以得到客户端的文件名,注意只是文件名,我这里没有用,因为报错。呵呵。UserFilename属性oFileUp.Form(strFormElement).UserFileName可以得到客户端文件的完整路径。可以输出一下给用户看看。TotalBytes属性oFileUp.Form(strFormElement).TotalBytes可以得到文件的大小,单位为ByteSaveInVirtual(路径)方法oFileUp.Form(strFormElement).SaveInVirtual "upfile/"oFileUp.Form(strFormElement).SaveInVirtual "upfile/aa.abc"如果只指定了路径,则保留原文件名,否则按指定指定文件名保存服务器管理员可以禁止掉其他所有方法,但这个一定会留的。SaveAs (文件名)方法oFileUp.Form(strFormElement).SaveAs "C:aaa.tmp"如果没有指定路径,只是指定了文件名,那么将用Path属性指定的路径。Path属性一会介绍。Save方法oFileUp.Path="D:wwwrootabcupfile"注意必须是真实路径,可以用Server.MapPath来转换虚拟路径。oFileUp.Form(strFormElement).Save不能指定文件名喽。注意:Path属性必须在提到任何表单项之前,建议放在Set oFileUp = Server.CreateObject("SoftArtisans.FileUp")的后面。前提是你用的话。Delete (文件名,可选)oFileUp.Form(strFormElement).Delete从服务器上删除文件,如果不指定文件名,则删除当前的文件。如果指定的话,必须是文件的完整路径。Flush方法oFileUp.Flush当你不想保存任何东西的时候,可以用它来放弃全部的输入流。
推荐阅读
asp实现防止站外提交内容的两个方法
方式一: 复制代码 代码如下:<% Function IsSelfRefer() Dim formUrl,relUrl formUrl=LCase(Trim(request.ServerVariables("HTTP_REFERER"))) If formUrl="" Then IsSelfRefer = False Else >>>详细阅读
本文标题:利用SA FileUp组件进行多文件上传
地址:http://www.17bianji.com/kaifa2/ASP/32828.html
1/2 1