Asp组件有内置的、服务器安装时附带的,更多的是第三方提供的,今天来学习文件上传的其中一个组件aspupload组件使用方法。
二、aspupload组件的下载、安装或注册
1、asp组件的下载、安装
(1)可以从网上下载。
(2)直接双击后进行安装。
AspUpload组件下载
2、asp上传组件的功能
a.限制上载文件的大小
b.设置用户的权限
c.修改文件属性
d.同时上载多个文件
e.能够将文件保存到数据库中
f.支持文件删除,自动生成与服务器上文件不同名的文件
g.拥有管理权限的用户甚至可以使用该控件进行远程注册
三、aspupload组件的简单应用
1、实例一(1.asp):通过代码实现三个文件的上传功能。
如下图所示:
(1)静态页面:1个表单,三个文件域,一个按钮,其中表单form的动作如下。
(2)其中客户端文件要注意几点:
* 文件上载提交表单(Form)的enctype必须指定为“multipart/form-data”
* 语句表示上载文件域,用户可以在该域中输入或选定文件。
* 传递一个参数act(名称可自己取),其值可以自己随便定,目的是触发上传事件。
(3)动态代码如下:
2、实例二(2.asp):修改程序1.asp,要求在上传文件后显示上传文件的文件名及大小。
如下图所示:
增加如下代码:
response.write("
文件1是:
")
response.write(upload.files(1).path)
response.write("
文件2是:
")
response.write(upload.files(2).path)
response.write("
文件3是:
")
response.write(upload.files(3).path)
说明:
upload.files方法用来获取文件的相关属性,path是文件的路径,size是文件的大小。
3、实例三(3.asp):修改程序2.asp,要求上传的三个文件大小不能超过5K,如果上传的文件已经存在则要求不覆盖文件。
在上传之前增加如下代码:
upload.setmaxsize 5120,false
upload.overwritefiles=false
说明:
(1)upload.setmaxsize 5120,false 其功能为设置文件最大为5120字节,false参数说明当文件超过5120字节时则删除超过部分,true参数说明当文件超过5120字节时则出错。
(2)upload.overwritefiles=false,其功能表示文件不进行覆盖,如果上传同样文件名的文件,上传后文件名自动会在后面添加一个数字。
四、自学第二个上传文件的组件
1、Lyfupload组件的下载
2、学习此组件的安装或注册
3、通过课本例子进行文件的上传
五、问题
1、传到学校里服务器172.18.0.7运行时出现以下错误,Server.CreateObject 失败
分析原因:学校服务器不支持aspupload上传组件
2、如果服务器不支持aspupload等上传组件,请大家使用无组件上传功能(编写代码),见书本上P322,此类代码比较复杂,同学们能够拿来使用,无须自己编写。
3、大家在网上申请个人空间时要看清服务器支持哪些组件,这样有利于编写代码。
这个程序是没有任何漏洞的,要想使用得更好,在上传时和执行文件都加上权限那就更安全了,不明白留言给我!本程序分三个页面及一个文件夹(UpLoadFile),具体文件代码如下:
文件一:上传文件页面
<table width="670" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#999999">
<form action="upload.asp" enctype="multipart/form-data" name="form1" method="post">
<tr bgcolor="#999999">
<td width="180"><font color="#FFFFFF">项目</font></td>
<td align="center"><font color="#FFFFFF">内容</font></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="180">产品名称</td>
<td>
<input name="strName" type="text" id="strName"></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="180">产品图片</td>
<td>
<input name="strPhoto" type="file" id="strPhoto"></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="180">图片格式:gif/jpg<br>
图片大小:150K <br>
产品介绍</td>
<td>
<input name="strRemark" cols="45" rows="6" id="strRemark"></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="180"></td>
<td>
<input type="submit" name="Submit" value="提 交">
<input type="reset" name="Submit2" value="重 置"></td>
</tr>
</form>
</table>
文件二:上传执行数据页面
<%
OPTION EXPLICIT
Server.ScriptTimeOut=5000
%>
<!--#include FILE="UpLoadClass.asp"-->
<%
dim request2
'建立上传对象
set request2=New UpLoadClass
'以默认设置打开上传对象
'建议直接修改类的63,64,65,66行为自己需要的默认设置
'类的初始默认值分别为
'p_MaxSize = 153600 单文件最大150K
'p_FileType = "jpg/gif" 允许上传jpg/gif格式文件
'p_SavePath = "" 在当前目录保存文件,这里是相对路径,如:“UpLoadFile/”
'p_AutoSave = 0 自动生成无重复文件名保存目标文件
'这样每次就不要设置同样的参数了
request2.open()
%>
<html>
<head>
<title>快速应用——风声无组件上传类</title>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">
<link href="basic.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="760" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#FFFFFF" style="border:1px solid #999999">
<tr>
<td><blockquote>
<%
'显示类版本
response.Write("<br>"&request2.version&"<br>")
'显示产品名称
response.Write("<br>产品名称:"&request2.Form("strName"))
'显示源文件路径与名称
response.Write("<br>产品图片:"&request2.Form("strPhoto_Path")&request2.Form("strPhoto_Name"))
response.Write("=>")
'显示目标文件路径与名称
response.Write(request2.SavePath&request2.Form("strPhoto"))
'显示产品介绍
response.Write("<br>产品介绍:"&request2.Form("strRemark"))
'-------说明开始------
'可以看出上面的显示是淋漓尽致的
'文件是否需要保存由类自动判断,这已经符合大多数情况下的应用
'如果您需要更灵活的处理,参见[进阶应用]
'-------说明结束------
response.write "<br>[<a href=""javascript:history.back()"">返回</a>]"
%>
</blockquote></td>
</tr>
</table>
</body>
</html>
<%
'释放上传对象
set request2=nothing
%>
文件三:上传定义文件
<%
'----------------------------------------------------------
'***************** 风声无组件上传类 2.0 *****************
'作者:风声
'网站:http://www.17560.net http://www.54nb.com
'邮件:Rumor@17560.net
'版权:版权全体,源代码公开,各种用途均可免费使用
'**********************************************************
'----------------------------------------------------------
Class UpLoadClass
Private p_MaxSize,p_FileType,p_SavePath,p_AutoSave,p_Error
Private objForm,binForm,binItem,strDate,lngTime
Public FormItem,FileItem
Public Property Get Version
Version="Rumor UpLoadClass Version 2.0"
End Property
Public Property Get Error
Error=p_Error
End Property
Public Property Get MaxSize
MaxSize=p_MaxSize
End Property
Public Property Let MaxSize(lngSize)
if isNumeric(lngSize) then
p_MaxSize=clng(lngSize)
end if
End Property
Public Property Get FileType
FileType=p_FileType
End Property
Public Property Let FileType(strType)
p_FileType=strType
End Property
Public Property Get SavePath
SavePath=p_SavePath
End Property
Public Property Let SavePath(strPath)
p_SavePath=replace(strPath,chr(0),"")
End Property
Public Property Get AutoSave
AutoSave=p_AutoSave
End Property
Public Property Let AutoSave(byVal Flag)
select case Flag
case 0:
case 1:
case 2:
case false:Flag=2
case else:Flag=0
end select
p_AutoSave=Flag
End Property
Private Sub Class_Initialize
p_Error= -1
p_MaxSize = 1536000 '单个文件大小1.5M
p_FileType = "" '可上传任意类型文件,jpg/gif/swf
p_SavePath = "UpLoadFile/" '保存文件路径
p_AutoSave = 1 '用原名保存图片,0为用时间
strDate= replace(cstr(Date()),"-","")
lngTime= clng(timer()*1000)
Set binForm = Server.CreateObject("ADODB.Stream")
Set binItem = Server.CreateObject("ADODB.Stream")
Set objForm = Server.CreateObject("Scripting.Dictionary")
objForm.CompareMode = 1
End Sub
Private Sub Class_Terminate
objForm.RemoveAll
Set objForm = nothing
Set binItem = nothing
binForm.Close()
Set binForm = nothing
End Sub
Public Sub Open()
if p_Error=-1 then
p_Error=0
else
Exit Sub
end if
Dim lngRequestSize,binRequestData,strFormItem,strFileItem
Const strSplit="'"">"
lngRequestSize=Request.TotalBytes
if lngRequestSize<1 then
p_Error=4
Exit Sub
end if
binRequestData=Request.BinaryRead(lngRequestSize)
binForm.Type = 1
binForm.Open
binForm.Write binRequestData
Dim bCrLf,strSeparator,intSeparator
bCrLf=ChrB(13)&ChrB(10)
intSeparator=InstrB(1,binRequestData,bCrLf)-1
strSeparator=LeftB(binRequestData,intSeparator)
Dim p_start,p_end,strItem,strInam,intTemp,strTemp
Dim strFtyp,strFnam,strFext,lngFsiz
p_start=intSeparator+2
Do
p_end =InStrB(p_start,binRequestData,bCrLf&bCrLf)+3
binItem.Type=1
binItem.Open
binForm.Position=p_start
binForm.CopyTo binItem,p_end-p_start
binItem.Position=0
binItem.Type=2
binItem.Charset="gb2312"
strItem=binItem.ReadText
binItem.Close()
p_start=p_end
p_end =InStrB(p_start,binRequestData,strSeparator)-1
binItem.Type=1
binItem.Open
binForm.Position=p_start
lngFsiz=p_end-p_start-2
binForm.CopyTo binItem,lngFsiz
intTemp=Instr(39,strItem,"""")
strInam=Mid(strItem,39,intTemp-39)
if Instr(intTemp,strItem,"filename=""")<>0 then
if not objForm.Exists(strInam&"_From") then
strFileItem=strFileItem&strSplit&strInam
if binItem.Size<>0 then
intTemp=intTemp+13
strFtyp=Mid(strItem,Instr(intTemp,strItem,"Content-Type: ")+14)
strTemp=Mid(strItem,intTemp,Instr(intTemp,strItem,"""")-intTemp)
intTemp=InstrRev(strTemp,"\")
strFnam=Mid(strTemp,intTemp+1)
objForm.Add strInam&"_Type",strFtyp
objForm.Add strInam&"_Name",strFnam
objForm.Add strInam&"_Path",Left(strTemp,intTemp)
objForm.Add strInam&"_Size",lngFsiz
if Instr(intTemp,strTemp,".")<>0 then
strFext=Mid(strTemp,InstrRev(strTemp,".")+1)
else
strFext=""
end if
if left(strFtyp,6)="image/" then
binItem.Position=0
binItem.Type=1
strTemp=binItem.read(10)
if strcomp(strTemp,chrb(255) &chrb(216) &chrb(255) &chrb(224) &chrb(0) &chrb(16) &chrb(74) &chrb(70) &chrb(73) &chrb(70),0)=0 then
if Lcase(strFext)<>"jpg" then strFext="jpg"
binItem.Position=3
do while not binItem.EOS
do
intTemp = ascb(binItem.Read(1))
loop while intTemp = 255 and not binItem.EOS
if intTemp <192 or intTemp >195 then
binItem.read(Bin2Val(binItem.Read(2))-2)
else
Exit do
end if
do
intTemp = ascb(binItem.Read(1))
loop while intTemp <255 and not binItem.EOS
loop
binItem.Read(3)
objForm.Add strInam&"_Height",Bin2Val(binItem.Read(2))
objForm.Add strInam&"_Width",Bin2Val(binItem.Read(2))
elseif strcomp(leftB(strTemp,8),chrb(137) &chrb(80) &chrb(78) &chrb(71) &chrb(13) &chrb(10) &chrb(26) &chrb(10),0)=0 then
if Lcase(strFext)<>"png" then strFext="png"
binItem.Position=18
objForm.Add strInam&"_Width",Bin2Val(binItem.Read(2))
binItem.Read(2)
objForm.Add strInam&"_Height",Bin2Val(binItem.Read(2))
elseif strcomp(leftB(strTemp,6),chrb(71) &chrb(73) &chrb(70) &chrb(56) &chrb(57) &chrb(97),0)=0 or strcomp(leftB(strTemp,6),chrb(71) &chrb(73) &chrb(70) &chrb(56) &chrb(55) &chrb(97),0)=0 then
if Lcase(strFext)<>"gif" then strFext="gif"
binItem.Position=6
objForm.Add strInam&"_Width",BinVal2(binItem.Read(2))
objForm.Add strInam&"_Height",BinVal2(binItem.Read(2))
elseif strcomp(leftB(strTemp,2),chrb(66) &chrb(77),0)=0 then
if Lcase(strFext)<>"bmp" then strFext="bmp"
binItem.Position=18
objForm.Add strInam&"_Width",BinVal2(binItem.Read(4))
objForm.Add strInam&"_Height",BinVal2(binItem.Read(4))
end if
end if
objForm.Add strInam&"_Ext",strFext
objForm.Add strInam&"_From",p_start
intTemp=GetFerr(lngFsiz,strFext)
if p_AutoSave<>2 then
objForm.Add strInam&"_Err",intTemp
if intTemp=0 then
if p_AutoSave=0 then
strFnam=GetTimeStr()
if strFext<>"" then strFnam=strFnam&"."&strFext
end if
binItem.SaveToFile Server.MapPath(p_SavePath&strFnam),2
objForm.Add strInam,strFnam
end if
end if
else
objForm.Add strInam&"_Err",-1
end if
end if
else
binItem.Position=0
binItem.Type=2
binItem.Charset="gb2312"
strTemp=binItem.ReadText
if objForm.Exists(strInam) then
objForm(strInam) = objForm(strInam)&","&strTemp
else
strFormItem=strFormItem&strSplit&strInam
objForm.Add strInam,strTemp
end if
end if
binItem.Close()
p_start = p_end+intSeparator+2
loop Until p_start+3>lngRequestSize
FormItem=split(strFormItem,strSplit)
FileItem=split(strFileItem,strSplit)
End Sub
Private Function GetTimeStr()
lngTime=lngTime+1
GetTimeStr=strDate&lngTime
End Function
Private Function GetFerr(lngFsiz,strFext)
dim intFerr
intFerr=0
if lngFsiz>p_MaxSize and p_MaxSize>0 then
if p_Error=0 or p_Error=2 then p_Error=p_Error+1
intFerr=intFerr+1
end if
if Instr(1,LCase("/"&p_FileType&"/"),LCase("/"&strFext&"/"))=0 and p_FileType<>"" then
if p_Error<2 then p_Error=p_Error+2
intFerr=intFerr+2
end if
GetFerr=intFerr
End Function
Public Function Save(Item,strFnam)
Save=false
if objForm.Exists(Item&"_From") then
dim intFerr,strFext
strFext=objForm(Item&"_Ext")
intFerr=GetFerr(objForm(Item&"_Size"),strFext)
if objForm.Exists(Item&"_Err") then
if intFerr=0 then
objForm(Item&"_Err")=0
end if
else
objForm.Add Item&"_Err",intFerr
end if
if intFerr<>0 then Exit Function
if VarType(strFnam)=2 then
select case strFnam
case 0:strFnam=GetTimeStr()
if strFext<>"" then strFnam=strFnam&"."&strFext
case 1:strFnam=objForm(Item&"_Name")
end select
end if
binItem.Type = 1
binItem.Open
binForm.Position = objForm(Item&"_From")
binForm.CopyTo binItem,objForm(Item&"_Size")
binItem.SaveToFile Server.MapPath(p_SavePath&strFnam),2
binItem.Close()
if objForm.Exists(Item) then
objForm(Item)=strFnam
else
objForm.Add Item,strFnam
end if
Save=true
end if
End Function
Public Function GetData(Item)
GetData=""
if objForm.Exists(Item&"_From") then
if GetFerr(objForm(Item&"_Size"),objForm(Item&"_Ext"))<>0 then Exit Function
binForm.Position = objForm(Item&"_From")
GetData=binFormStream.Read(objForm(Item&"_Size"))
end if
End Function
Public Function Form(Item)
if objForm.Exists(Item) then
Form=objForm(Item)
else
Form=""
end if
End Function
Private Function BinVal2(bin)
dim lngValue,i
lngValue = 0
for i = lenb(bin) to 1 step -1
lngValue = lngValue *256 + ascb(midb(bin,i,1))
next
BinVal2=lngValue
End Function
Private Function Bin2Val(bin)
dim lngValue,i
lngValue = 0
for i = 1 to lenb(bin)
lngValue = lngValue *256 + ascb(midb(bin,i,1))
next
Bin2Val=lngValue
End Function
End Class
%>
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)