ASP网站制作之Asp无组件文件上传的实例
ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊!上传|无组件1.库文件(upload.inc.asp)<%
DimoUpFileStreamClassUpFile_Class
DimForm,File,Version,Err
PrivateSubClass_Initialize
Version="无组件上传类VersionV1.0"
Err=-1
EndSub
PrivateSubClass_Terminate
扫除变量及对像
IfErr<0Then
Form.RemoveAll
SetForm=Nothing
File.RemoveAll
SetFile=Nothing
oUpFileStream.Close
SetoUpFileStream=Nothing
EndIf
EndSub
PublicSubGetData(RetSize)
界说变量
DimRequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
DimiFileSize,sFilePath,sFileType,sFormValue,sFileName
DimiFindStart,iFindEnd
DimiFormStart,iFormEnd,sFormName
代码入手下手
IfRequest.TotalBytes<1Then
Err=1
ExitSub
EndIf
IfRetSize>0Then
IfRequest.TotalBytes>RetSizeThen
Err=2
ExitSub
EndIf
EndIf
SetForm=Server.CreateObject("Scripting.Dictionary")
Form.CompareMode=1
SetFile=Server.CreateObject("Scripting.Dictionary")
File.CompareMode=1
SettStream=Server.CreateObject("ADODB.Stream")
SetoUpFileStream=Server.CreateObject("ADODB.Stream")
oUpFileStream.Type=1
oUpFileStream.Mode=3
oUpFileStream.Open
oUpFileStream.WriteRequest.BinaryRead(Request.TotalBytes)
oUpFileStream.Position=0
RequestBinDate=oUpFileStream.Read
iFormEnd=oUpFileStream.Size
bCrLf=ChrB(13)&ChrB(10)
获得每一个项目之间的分开符
sSpace=MidB(RequestBinDate,1,InStrB(1,RequestBinDate,bCrLf)-1)
iStart=LenB(sSpace)
iFormStart=iStart+2
分化项目
Do
iInfoEnd=InStrB(iFormStart,RequestBinDate,bCrLf&bCrLf)+3
tStream.Type=1
tStream.Mode=3
tStream.Open
oUpFileStream.Position=iFormStart
oUpFileStream.CopyTotStream,iInfoEnd-iFormStart
tStream.Position=0
tStream.Type=2
tStream.CharSet="gb2312"
sInfo=tStream.ReadText
获得表单项目称号
iFormStart=InStrB(iInfoEnd,RequestBinDate,sSpace)-1
iFindStart=InStr(22,sInfo,"name=""",1)+6
iFindEnd=InStr(iFindStart,sInfo,"""",1)
sFormName=Mid(sinfo,iFindStart,iFindEnd-iFindStart)
假如是文件
IfInStr(45,sInfo,"filename=""",1)>0Then
SetoFileInfo=newFileInfo_Class
获得文件属性
iFindStart=InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd=InStr(iFindStart,sInfo,"""",1)
sFileName=Mid(sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileName=Mid(sFileName,InStrRev(sFileName,"")+1)
oFileInfo.FilePath=Left(sFileName,InStrRev(sFileName,"")+1)
oFileInfo.FileExt=Mid(sFileName,InStrRev(sFileName,".")+1)
iFindStart=InStr(iFindEnd,sInfo,"Content-Type:",1)+14
iFindEnd=InStr(iFindStart,sInfo,vbCr)
oFileInfo.FileType=Mid(sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileStart=iInfoEnd
oFileInfo.FileSize=iFormStart-iInfoEnd-2
oFileInfo.FormName=sFormName
file.addsFormName,oFileInfo
else
假如是表单项目
tStream.Close
tStream.Type=1
tStream.Mode=3
tStream.Open
oUpFileStream.Position=iInfoEnd
oUpFileStream.CopyTotStream,iFormStart-iInfoEnd-2
tStream.Position=0
tStream.Type=2
tStream.CharSet="gb2312"
sFormValue=tStream.ReadText
IfForm.Exists(sFormName)Then
Form(sFormName)=Form(sFormName)&","&sFormValue
else
form.AddsFormName,sFormValue
EndIf
EndIf
tStream.Close
iFormStart=iFormStart+iStart+2
假如到文件尾了就加入
LoopUntil(iFormStart+2)=iFormEnd
RequestBinDate=""
SettStream=Nothing
EndSub
EndClass
文件属性类
ClassFileInfo_Class
DimFormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
保留文件办法
PublicFunctionSaveToFile(Path)
OnErrorResumeNext
DimoFileStream
SetoFileStream=CreateObject("ADODB.Stream")
oFileStream.Type=1
oFileStream.Mode=3
oFileStream.Open
oUpFileStream.Position=FileStart
oUpFileStream.CopyTooFileStream,FileSize
oFileStream.SaveToFilePath,2
oFileStream.Close
SetoFileStream=Nothing
ifErr.Number0then
SaveToFile=err.number&"**"&Err.descripton
else
SaveToFile="ok"
endif
EndFunction
获得文件数据
PublicFunctionFileDate
oUpFileStream.Position=FileStart
FileDate=oUpFileStream.Read(FileSize)
EndFunction
EndClass
%>
2.处置用户提交后的页面(upload.asp)
<!--#includefile="upload.inc.asp"-->
<html>
<head>
<title>文件上传</title>
</head>
<bodytopmargin="0"leftmargin="0">
<tablewidth=100%border=0cellspacing="0"cellpadding="0"><tr><tdclass=tablebody1width=100%height=100%>
<%
dimupload,file,formName,formPath,filename,fileExt
dimranNum
callUpFile()
===========无组件上传(upload_0)====================
subUpFile()
setupload=newUpFile_Class创建上传工具
upload.GetData(500*1024)获得上传数据,此处即为500K
ifupload.err>0then
selectcaseupload.err
case1
Response.Write"请先选择你要上传的文件 [<ahref=#onclick=history.go(-1)>从头上传</a>]"
case2
Response.Write"图片巨细凌驾了限定500K [<ahref=#onclick=history.go(-1)>从头上传</a>]"
endselect
exitsub
else
formPath=upload.form("filepath")文件保留目次,此目次必需为程序可读写
ifformPath=""then
formPath="rwdata/"
endif
在目次后加(/)
ifright(formPath,1)"/"then
formPath=formPath&"/"
endifforeachformNameinupload.file列出一切上传了的文件
setfile=upload.file(formName)天生一个文件工具
iffile.filesize<100then
response.write"请先选择你要上传的图片 [<ahref=#onclick=history.go(-1)>从头上传</a>]"
response.end
endif
fileExt=lcase(file.FileExt)
ifCheckFileExt(fileEXT)=falsethen
response.write"文件格局不准确 [<ahref=#onclick=history.go(-1)>从头上传</a>]"
response.end
endif
randomize
ranNum=int(90000*rnd)+10000
filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
iffile.FileSize>0then假如FileSize>0申明有文件数据
result=file.SaveToFile(Server.mappath(filename))保留文件
ifresult="ok"then
response.writeformName&"uploadOK,hadsavedto"&filename&"<br>"
else
response.writeformName&"uploadFail,"&result&"<br>"
endif
endif
setfile=nothing
next
setupload=nothing
endif
endsub
判别文件范例是不是及格
PrivateFunctionCheckFileExt(fileEXT)
dimForumupload
Forumupload="gif,jpg,bmp,jpeg"
Forumupload=split(Forumupload,",")
fori=0toubound(Forumupload)
iflcase(fileEXT)=lcase(trim(Forumupload(i)))then
CheckFileExt=true
exitFunction
else
CheckFileExt=false
endif
next
EndFunction
%>
</td></tr></table>
</body>
</html>
3.HTML表单(upload.html)
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>asp无组件上传</title>
</head><body>
请选择要上传的文件
<formaction="upfile.asp"method="post"enctype="multipart/form-data"name="form1">
<inputtype="file"name="file">
<!--<br>
<inputtype="file"name="file">
<br>
<inputtype="file"name="file">
<br>-->
<inputtype="submit"name="Submit"value="提交">
</form>
</body>
</html>
ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。ApacheASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。 不能只是将它停留在纸上谈兵的程度上。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
页:
[1]