如何使用AspUpload组件上传文件

如何使用AspUpload组件上传文件,第1张

一、摘要

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

%>


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/46410.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-24
下一篇2023-02-24

发表评论

登录后才能评论

评论列表(0条)

    保存