asp如何实现文件上传功能

asp如何实现文件上传功能,第1张

基本原理是:采用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出,从中截取出所需的文件数据,以二进制文件方式存盘。

下面是上传文件页面的一个例子:

<html>

<body>

<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">

<input type="file" name="FileName">

<INPUT TYPE="Submit" VALUE="Upload"></TD>

</form>

</body>

</html>

扩展资料

几种文件上传技术的比较

1、基于HTTP协议

该方法需要编程者利用第三方软件,如DELPHI、VB等,在应用程序中先进行HTTP协议编程,然后将待上传文件内容按HTTP协议的格式打包,最后向WEB服务器发送上传的请求报文,从而实现文件的上传。

因尺枣为DELPHI和VB不能编写完整的WEB网络程序,只能编写WEB小应用程序,因此,该方法只用于功能受限的网络应用。

2、基于VB(或DELPHI等)开发的文件上传组件

该方法利用VB(或DELPHI等编程语言)开发ASP服务器组件,实现特定的文件上传服务。它首先利用ASP表单功能将文件(二进制格式)从用户端上传到服务器端,然后使用VB开发的组件,对二进制文件进行处理,成为可以正常读写的文件。

该方法要求编程者不仅掌握ASP语言,而且还能利用VB等第三方语言进行组件编程,增加了开发的难度。

3、基于数据库技术

该方法和上个方法有类似之处。不同的地方在于对上传的二进制文件的处理上。它使用数据库来保存二进陵唯拆制文件。无论是小型数据库还是大型数据库都提供了存储二进制数据的数据类型,只要以山如Append Chunk方式将数据存入相应的字段就可以了。

该方法虽然简单可行,但是因为每次上传的文件大小都是不一样的,因此,会对数据库的空间造成很大的浪费,降低了数据的访问速度;并且使得文件只能在数据库环境下进行访问,造成了很大的不便。

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

asp程迟纳哗序如何上传?

解析:

先给你个无组茄握件UPLAOD 的类给你。包括说明 至于删除使用FSO的 DELETEFILE就码行可以了

文件:upload_5xsoft.inc

<!--METADATA TYPE="TypeLib" UUID="{***********-0000-0010-8000-00aa006d2ea4}"-->

<%

dim fo,gPath,gAct,gFileName,gFilePath,g,gRootUrl,gBaseUrl,gPage,gSearch,gEachPage,gFolder,gFilter

dim gPageSize,sTemp,gNoFile

dim sfor(28,2)

gPageSize=100

gRootUrl=Session("webeditbase")

if right(gRootUrl,1)<>"/" then gRootUrl=gRootUrl&"/"

gNoFile=array("asp","aspx") '禁止访问的脚本

set fo=Server.CreateObject("Scripting.FileSystemObject")

sFor(0,0)="txt":sFor(0,1)=1

sFor(1,0)="chm":sFor(1,1)=2

sFor(2,0)="hlp":sFor(2,1)=2

sFor(3,0)="doc":sFor(3,1)=3

sFor(4,0)="pdf":sFor(4,1)=4

sFor(5,0)="gif":sFor(5,1)=6

sFor(6,0)="":sFor(6,1)=6

sFor(7,0)="png":sFor(7,1)=6

sFor(8,0)="bmp":sFor(8,1)=6

sFor(9,0)="asp":sFor(9,1)=7

sFor(10,0)="jsp":sFor(10,1)=7

sFor(11,0)="js" :sFor(11,1)=7

sFor(12,0)="":sFor(12,1)=8

sFor(13,0)="":sFor(13,1)=8

sFor(14,0)="s":sFor(14,1)=8

sFor(15,0)="zip":sFor(15,1)=9

sFor(16,0)="rar":sFor(16,1)=9

sFor(17,0)="exe":sFor(17,1)=10

sFor(18,0)="avi":sFor(18,1)=11

sFor(19,0)="mpg":sFor(19,1)=11

sFor(20,0)="ra" :sFor(20,1)=12

sFor(21,0)="ram":sFor(21,1)=12

sFor(22,0)="mid":sFor(22,1)=13

sFor(23,0)="wav":sFor(23,1)=13

sFor(24,0)="mp3":sFor(24,1)=13

sFor(25,0)="asf":sFor(25,1)=11

sFor(26,0)="php":sFor(26,1)=7

sFor(27,0)="php3":sFor(27,1)=7

sFor(28,0)="aspx":sFor(28,1)=7

gFilePath=Request.ServerVariables("SCRIPT_NAME")

gFileName=mid(gFilePath,instrRev(gFilePath,"/")+1)

gFilePath=lcase(left(gFilePath,instrRev(gFilePath,"/")))

gPath=lcase(getVar("path","str",gRootUrl))

if left(gPath,1)<>"/" then gPath=gRootUrl&gPath

gPage=getVar("page","num",1)

gAct=getVar("act","str","")

gFilter=getVar("filter","str","")

setBaseUrl

sub setBaseUrl()

gBaseUrl=gFileName&"?page="&gPage&"&path="&gPath

if gFilter<>"" then gBaseUrl=gBaseUrl&"&filter="&gFilter

end sub

function getVar(theStr,strType,defValue)

select case strType

case "str"

if isEmpty(Request.QueryString(theStr)) or trim(Request.QueryString(theStr))="" then

getVar=defValue

else

getVar=trim(Request.QueryString(theStr))

end if

case "num"

if isEmpty(Request.QueryString(theStr)) or not isNumeric(Request.QueryString(theStr)) then

getVar=defValue

else

getVar=cint(Request.QueryString(theStr))

end if

case else

getStr=defValue

end select

end function

function getForm(theStr,strType,defValue)

select case strType

case "str"

if isEmpty(Request.form(theStr)) or trim(Request.form(theStr))="" then

getForm=defValue

else

getForm=trim(Request.form(theStr))

end if

case "num"

if isEmpty(Request.form(theStr)) or not isNumeric(Request.form(theStr)) then

getForm=defValue

else

getForm=cint(Request.form(theStr))

end if

case else

getForm=defValue

end select

end function

sub End(info,i *** ack,dir)

set fo=nothing

set gFolder=nothing

if info<>"" then Response.Write("<script language=""javascript"">alert('"&info&"')</script>")

select case i *** ack

case 1

Response.Write("<script language=""javascript"">history.back()</script>")

case 2

Response.Write("<script language=""javascript"">location.href='"&dir&"'</script>")

end select

Response.write("</body></>")

Response.End

end sub

function procIsEdit(sName)

dim i1,i,isEdit

isEdit=Array(1,7,8)

procIsEdit=0

i1=procGetFormat(sName)

for i=0 to ubound(isEdit)

if isEdit(i)=i1 then

procIsEdit=1

exit for

end if

next

end function

function procGetExtName(sName)

procGetExtName=""

if instrRev(sName,".")<1 then exit function

procGetExtName=lcase(mid(sName,instrRev(sName,".")+1))

end function

function procGetFormat(sName)

dim i,str

procGetFormat=0

if instrRev(sName,".")=0 then exit function

str=lcase(mid(sName,instrRev(sName,".")+1))

for i=0 to uBound(sFor,1)

if str=sFor(i,0) then

procGetFormat=sFor(i,1)

exit for

end if

next

end function

function procCheckFile(sName,ischeck)

dim sExt,sPath,i,errorchar

errorchar=array("'","""","\","/","*","?","&","|","<",">")

procCheckFile="ok"

sExt=lcase(procGetExtName(sName))

if gFilter<>"" then

if instr(sName,gFilter)<1 then

procCheckFile="没有权限访问此文件!"

exit function

end if

end if

if Session("webeditrun")="0" then

for i=0 to ubound(gNoFile)

if gNoFile(i)=sExt then

procCheckFile="没有权限访问此文件!"

exit function

end if

next

end if

if ischeck>0 then

sPath=left(sName,instrRev(sName,"/"))

sPath=procCheckDir(sPath,1)

if sPath<>"ok" then

procCheckFile=sPath

exit function

end if

if ischeck=1 and not fo.FileExists(Server.MapPath(sName)) then

procCheckFile="文件没有找到!"

exit function

end if

else

for i=0 to ubound(errorchar)

if instr(sName,errorchar(i))>0 then

procCheckFile="文件名中含有非法字符!"

exit function

end if

next

end if

procCheckFile="ok"

end function

function procCheckDir(sPath,mode)

dim errorchar,i,hd,str

sPath=lcase(sPath)

procCheckDir="ok"

errorchar=array("'","""","\","..","","*","?","&","|","<",">")

if isempty(sPath) or trim(sPath)="" then

procCheckDir="目录不能为空!"

exit function

end if

for i=0 to ubound(errorchar)

if instr(sPath,errorchar(i))>0 then

procCheckDir="目录名中含有非法字符"

exit function

end if

next

if gFilePath=left(sPath,len(gFilePath)) then

procCheckDir="没有权限访问此目录!"

exit function

end if

if mode=0 then exit function

if not fo.FolderExists(Server.MapPath(sPath)) then

procCheckDir="目录"&sPath&"没有找到!"

exit function

end if

if left(sPath,len(gRootUrl))<>gRootUrl then

procCheckDir="没有权限访问此目录!"

exit Function

end if

end function

'取文件夹的类型

Function GetFileExt(strFilePath)

GetFileExt=Mid(strFilePath,InstrRev(strFilePath,"."))

End Function

%>

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

'''''''''''''''''''''''''''''''''''''''''''''''''

'

'请保留此信息: 稻香老农制作5xSoft/

'

'''''''''''''''''''''''''''''''''''''''''''''''''

dim upfile_5xSoft_Stream

Class upload_5xSoft

dim Form,File,Version

Private Sub Class_Initialize

dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFile

dim strDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePath,iDivLen,mStr

Version="数据添加成功!!"

if Request.TotalBytes<1 then Exit Sub

set Form=CreateObject("Scripting.Dictionary")

set File=CreateObject("Scripting.Dictionary")

set upfile_5xSoft_Stream=CreateObject("Adodb.Stream")

upfile_5xSoft_Stream.mode=3

upfile_5xSoft_Stream.type=1

upfile_5xSoft_Stream.open

upfile_5xSoft_Stream.write Request.BinaryRead(Request.TotalBytes)

vbEnter=Chr(13)&Chr(10)

iDivLen=inString(1,vbEnter)+1

strDiv=subString(1,iDivLen)

iFormStart=iDivLen

iFormEnd=inString(iformStart,strDiv)-1

while iFormStart <iFormEnd

iStart=inString(iFormStart,"name=""")

iEnd=inString(iStart+6,"""")

mFormName=subString(iStart+6,iEnd-iStart-6)

iFileNameStart=inString(iEnd+1,"filename=""")

if iFileNameStart>0 and iFileNameStart<iFormEnd then

iFileNameEnd=inString(iFileNameStart+10,"""")

mFileName=subString(iFileNameStart+10,iFileNameEnd-iFileNameStart-10)

iStart=inString(iFileNameEnd+1,vbEnter&vbEnter)

iEnd=inString(iStart+4,vbEnter&strDiv)

if iEnd>iStart then

mFileSize=iEnd-iStart-4

else

mFileSize=0

end if

set theFile=new FileInfo

theFile.FileName=getFileName(mFileName)

theFile.FilePath=getFilePath(mFileName)

theFile.FileSize=mFileSize

theFile.FileStart=iStart+4

theFile.FormName=FormName

file.add mFormName,theFile

else

iStart=inString(iEnd+1,vbEnter&vbEnter)

iEnd=inString(iStart+4,vbEnter&strDiv)

if iEnd>iStart then

mFormValue=subString(iStart+4,iEnd-iStart-4)

else

mFormValue=""

end if

form.Add mFormName,mFormValue

end if

iFormStart=iformEnd+iDivLen

iFormEnd=inString(iformStart,strDiv)-1

wend

End Sub

Private Function subString(theStart,theLen)

dim i,c,stemp

upfile_5xSoft_Stream.Position=theStart-1

stemp=""

for i=1 to theLen

if upfile_5xSoft_Stream.EOS then Exit for

c=ascB(upfile_5xSoft_Stream.Read(1))

If c >127 Then

if upfile_5xSoft_Stream.EOS then Exit for

stemp=stemp&Chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.Read(1)))&ChrB(c)))

i=i+1

else

stemp=stemp&Chr(c)

End If

Next

subString=stemp

End function

Private Function inString(theStart,varStr)

dim i,j,bt,theLen,str

InString=0

Str=toByte(varStr)

theLen=LenB(Str)

for i=theStart to upfile_5xSoft_Stream.Size-theLen

if i>upfile_5xSoft_Stream.size then exit Function

upfile_5xSoft_Stream.Position=i-1

if AscB(upfile_5xSoft_Stream.Read(1))=AscB(midB(Str,1)) then

InString=i

for j=2 to theLen

if upfile_5xSoft_Stream.EOS then

inString=0

Exit for

end if

if AscB(upfile_5xSoft_Stream.Read(1))<>AscB(MidB(Str,j,1)) then

InString=0

Exit For

end if

next

if InString<>0 then Exit Function

end if

next

End Function

Private Sub Class_Terminate

form.RemoveAll

file.RemoveAll

set form=nothing

set file=nothing

upfile_5xSoft_Stream.close

set upfile_5xSoft_Stream=nothing

End Sub

Private function GetFilePath(FullPath)

If FullPath <>"" Then

GetFilePath = left(FullPath,InStrRev(FullPath, "\"))

Else

GetFilePath = ""

End If

End function

Private function GetFileName(FullPath)

If FullPath <>"" Then

GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)

Else

GetFileName = ""

End If

End function

Private function toByte(Str)

dim i,iCode,c,iLow,iHigh

toByte=""

For i=1 To Len(Str)

c=mid(Str,i,1)

iCode =Asc(c)

If iCode<0 Then iCode = iCode + 65535

If iCode>255 Then

iLow = Left(Hex(Asc(c)),2)

iHigh =Right(Hex(Asc(c)),2)

toByte = toByte &chrB("&H"&iLow) &chrB("&H"&iHigh)

Else

toByte = toByte &chrB(AscB(c))

End If

Next

End function

End Class

Class FileInfo

dim FormName,FileName,FilePath,FileSize,FileStart

Private Sub Class_Initialize

FileName = ""

FilePath = ""

FileSize = 0

FileStart= 0

FormName = ""

End Sub

Public function SaveAs(FullPath)

dim dr,ErrorChar,i

SaveAs=1

if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit function

if FileStart=0 or right(fullpath,1)="/" then exit function

set dr=CreateObject("Adodb.Stream")

dr.Mode=3

dr.Type=1

dr.Open

upfile_5xSoft_Stream.position=FileStart-1

upfile_5xSoft_Stream.copyto dr,FileSize

dr.SaveToFile FullPath,2

dr.Close

set dr=nothing

SaveAs=0

end function

End Class

</SCRIPT>

上传表单:

<form action="upload" method="post" enctype="multipart/form-data" name=form1>

上传:<input name=file type=file size="30">

<input type=submit>

</form>

文件upload

<!--#include FILE="upload_5xsoft.inc"-->

<%

formPath="c:\upload\"

set upload=new upload_5xSoft

for each formName in upload.file

set file=upload.file(formName)

if file.FileSize>0 then

response.write "<br>"&file.FilePath&file.FileName&",大小:"&file.FileSize&" =>"&formPath&file.FileName

file.SaveAs Server.mappath(formPath&file.FileName)

end if

next

%>

<! #include FILE="upload inc" >谈如 <% dim upload file formName formPath iCount filename fileExt set upload=new upload_ xSoft 建立上传对象 formPath="uploadimages/"   在目录后启戚加(/) if right(formPath )<>"/" then formPath=formPath&"/" iCount= for each formName in upload file 列出所有上传了的文件  set file=upload file(formName)  生成一个文件对象  if file filesize<then   response write "<font size= ><br>请先选择你要上传的图片 [ <a href=# onclick=history go( )>重新上传</a>]</font>"  response end  end if    if file filesize>then  含旁启 response write "<font size= ><br>图片大小超过了限制 [ <a href=# onclick=history go( )>重新上传</a>]</font>"  response end  end if

fileExt=lcase(right(file filename ))

if fileEXT<>" jpg" and fileEXT<>" gif" then   response write "<font size= ><br>文件格式只能为jpg和gif格式 [ <a href=# onclick=history go( )>重新上传</a>]</font>"  response end  end if  randomize  ranNum=int( *rnd)+  filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&fileExt  filename =year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&fileExt    if file FileSize>then         如果 FileSize >说明有文件数据  file SaveAs Server mappath(filename)   保存文件 response write "<script>parent form img value= "&FileName &" </script>"

iCount=iCount+  end if  set file=nothing next set upload=nothing  删除此对象

Response Write "<img src= "&" /UpLoad/UpLoadImages/"&FileName &" onload = DrawImage(this) >"  response end %>

下面是upload inc的代码

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>dim upfile_ xSoft_Stream Class upload_ xSoft dim Form File Version Private Sub Class_Initialize dim iStart iFileNameStart iFileNameEnd iEnd vbEnter iFormStart iFormEnd theFile dim strDiv mFormName mFormValue mFileName mFileSize mFilePath iDivLen mStr if Request TotalBytes<then Exit Sub set Form=CreateObject("Scripting Dictionary") set File=CreateObject("Scripting Dictionary") set upfile_ xSoft_Stream=CreateObject("Adodb Stream") upfile_ xSoft_Stream mode= upfile_ xSoft_Stream type= upfile_ xSoft_Stream open upfile_ xSoft_Stream write Request BinaryRead(Request TotalBytes) vbEnter=Chr( )&Chr( ) iDivLen=inString( vbEnter)+ strDiv=subString( iDivLen) iFormStart=iDivLen iFormEnd=inString(iformStart strDiv) while iFormStart <iFormEnd   iStart=inString(iFormStart "name=""")   iEnd=inString(iStart+ """")   mFormName=subString(iStart+ iEnd iStart )   iFileNameStart=inString(iEnd+ "filename=""")   if iFileNameStart>and iFileNameStart<iFormEnd then    iFileNameEnd=inString(iFileNameStart+ """")    mFileName=subString(iFileNameStart+ iFileNameEnd iFileNameStart )    iStart=inString(iFileNameEnd+ vbEnter&vbEnter)    iEnd=inString(iStart+ vbEnter&strDiv)    if iEnd>iStart then     mFileSize=iEnd iStart    else     mFileSize=    end if    set theFile=new FileInfo    theFile FileName=getFileName(mFileName)    theFile FilePath=getFilePath(mFileName)    theFile FileSize=mFileSize    theFile FileStart=iStart+    theFile FormName=FormName    file add mFormName theFile   else    iStart=inString(iEnd+ vbEnter&vbEnter)    iEnd=inString(iStart+ vbEnter&strDiv)

if iEnd>iStart then     mFormValue=subString(iStart+ iEnd iStart )    else     mFormValue=""    end if    form Add mFormName mFormValue   end if

iFormStart=iformEnd+iDivLen   iFormEnd=inString(iformStart strDiv) wend End Sub

Private Function subString(theStart theLen)  dim i c stemp  upfile_ xSoft_Stream Position=theStart  stemp=""  for i= to theLen    if upfile_ xSoft_Stream EOS then Exit for    c=ascB(upfile_ xSoft_Stream Read( ))    If c >Then     if upfile_ xSoft_Stream EOS then Exit for     stemp=stemp&Chr(AscW(ChrB(AscB(upfile_ xSoft_Stream Read( )))&ChrB(c)))     i=i+    else     stemp=stemp&Chr(c)    End If  Next  subString=stemp End function

Private Function inString(theStart varStr)  dim i j bt theLen str  InString=  Str=toByte(varStr)  theLen=LenB(Str)  for i=theStart to upfile_ xSoft_Stream Size theLen    if i>upfile_ xSoft_Stream size then exit Function    upfile_ xSoft_Stream Position=i    if AscB(upfile_ xSoft_Stream Read( ))=AscB(midB(Str )) then     InString=i     for j= to theLen       if upfile_ xSoft_Stream EOS then         inString=         Exit for       end if       if AscB(upfile_ xSoft_Stream Read( ))<>AscB(MidB(Str j )) then         InString=         Exit For       end if     next     if InString<>then Exit Function    end if  next End Function

Private Sub Class_Terminate    form RemoveAll   file RemoveAll   set form=nothing   set file=nothing   upfile_ xSoft_Stream close   set upfile_ xSoft_Stream=nothing End Sub       Private function GetFilePath(FullPath)   If FullPath <>"" Then    GetFilePath = left(FullPath InStrRev(FullPath ""))   Else    GetFilePath = ""   End If  End  function    Private function GetFileName(FullPath)   If FullPath <>"" Then    GetFileName = mid(FullPath InStrRev(FullPath "")+ )   Else    GetFileName = ""   End If  End  function

Private function toByte(Str)    dim i iCode c iLow iHigh    toByte=""    For i= To Len(Str)    c=mid(Str i )    iCode =Asc(c)    If iCode<Then iCode = iCode +    If iCode>Then      iLow = Left(Hex(Asc(c)) )      iHigh =Right(Hex(Asc(c)) )      toByte = toByte &chrB("&H"&iLow) &chrB("&H"&iHigh)    Else      toByte = toByte &chrB(AscB(c))    End If    Next  End function End Class

lishixinzhi/Article/program/net/201311/14198


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12239890.html

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

发表评论

登录后才能评论

评论列表(0条)

保存