当前位置: 首页 > 图文教程 > 网络编程 > ASP > 利用SA FileUp组件进行多文件上传

ASP
asp分页(自己整理的2个分页程序)
ASP常用的系统配置函数
雨哲防采集策略之列表篇
雨哲浅谈关于防采集而不影响收录内容篇
asp数据库连接函数
ajax XMLHTTP Post Form时的表单乱码综合解决
ASP注入详细命令40条
用ASP实现MSSQL用户密码破解
ASP创建对象的两种方法比较
ASP字符串转换为整形、双精度型、布尔
ASP计算str2在str1中出现的次数
asp采集抓取网上房产信息的代码
ASP注册登陆实例代码
ASP中使用FileSystemObject时提高性能的方法
分享一个好东东,动态Include文件 (Dynamic File Includes)
解决 JScript 中使用日期类型数据时出现类型错误的问题
在ASP里面创建GUID
在JScript中使用缓存技术的实际代码
ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
海阳2006+功能中的潜水王

ASP 中的 利用SA FileUp组件进行多文件上传


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 68 ::
收藏到网摘: n/a

大家可以根据自己的实际情况进行修改,特别是数据库操作部分。
============================================
利用稻香老农的无组件进行多文件上传
请见:
http://bbs.blueidea.com/viewthread.php?tid=1249535
==================================================
本例属于文件和表单项的混合提交。
简单说明:
虽然重点在处理页上,但我觉得有必要介绍一下表单的项目。
本例是相册里像片的上传。
其中的groupID是隐藏域传递的大类的ID
其中的albumID是隐藏域传递的小类的ID
file1-->>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="/upload/tech/20091012/20091012012033_ae0eb3eed39d2bcef4622b2499a05fe6.js"></SCRIPT>

<TABLE width="98%" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;">
<TR>
<TD height="1"><img src="/upload/tech/20091012/20091012012033_17e62166fc8586dfa4d1bc0e1742c08b.gif" id="loadPhoto" onload="if(!firstLoad)showInfo();"></TD>
</TR>
</TABLE>

/upload/tech/20091012/20091012012033_ae0eb3eed39d2bcef4622b2499a05fe6.js

提示:您可以先修改部分代码再运行
===============
这里只写出了一个文件的相关输入框,其他四个类似。
说明一点,并不是有5 个的限制,只是我这里只写了5个。
其中的/upload/tech/20091012/20091012012033_ae0eb3eed39d2bcef4622b2499a05fe6.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和ContentType
iCount=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&" 大于"&upFileSize\1024&"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 是否是文件
Next
Set 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 if
conn.close
set 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>")
Next
Next
ContentType属性:
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
可以得到文件的大小,单位为Byte
SaveInVirtual(路径)方法
oFileUp.Form(strFormElement).SaveInVirtual "upfile/"
oFileUp.Form(strFormElement).SaveInVirtual "upfile/aa.abc"
如果只指定了路径,则保留原文件名,否则按指定指定文件名保存
服务器管理员可以禁止掉其他所有方法,但这个一定会留的。
SaveAs (文件名)方法
oFileUp.Form(strFormElement).SaveAs "C:\aa\a.tmp"
如果没有指定路径,只是指定了文件名,那么将用Path属性指定的路径。
Path属性一会介绍。
Save方法
oFileUp.Path="D:\wwwroot\abc\upfile\"
注意必须是真实路径,可以用Server.MapPath来转换虚拟路径。
oFileUp.Form(strFormElement).Save
不能指定文件名喽。
注意:Path属性必须在提到任何表单项之前,建议放在
Set oFileUp = Server.CreateObject("SoftArtisans.FileUp")
的后面。前提是你用的话。
Delete (文件名,可选)
oFileUp.Form(strFormElement).Delete
从服务器上删除文件,如果不指定文件名,则删除当前的文件。
如果指定的话,必须是文件的完整路径。
Flush方法
oFileUp.Flush
当你不想保存任何东西的时候,可以用它来放弃全部的输入流。