文件上传类
来源:互联网 发布:java虚拟机的作用 编辑:程序博客网 时间:2024/05/22 06:38
<Script RunAt="Server" Language="VBScript">
'==========================================================================
'名称:文件上传类
'功能:无组件文件上传
'运行环境:ADO 2.5以上
'作者:jimzhu 请保留
'版本:2.0
'日期:2004-12-08
'==========================================================================
Dim FormStream
Class upload_OneSky
Dim objForm,objFile
Private ItemStream,iScriptTimeOut
' Dim dteBegin
Property Get Form(strForm)
strForm=LCase(strForm)
If Not objForm.Exists(strForm) Then
Form=""
Else
Form=objForm(strForm)
End If
End Property
Property Get File(strFile)
strFile=LCase(strFile)
If Not objFile.Exists(strFile) Then
Set File=New FileInfo
Else
Set File=objFile(strFile)
End If
End Property
Private Sub Class_Initialize
iScriptTimeOut=Server.ScriptTimeOut
Server.ScriptTimeOut=900
' dteBegin=Timer()
'缓冲区尺寸
Const iCacheShortSize=512
Const iCacheSize=1048576 '1M '655360 '640KB
Dim RequestData,CrLf,theFile
Dim sInfo,iInfoEnd,sFormName,sFormValue
Dim sCache,iCachePosition,iCachePoint
Dim mbFind,miFindPoint,miFindPosition
Dim sFormSplit,iLenFormSplit
Dim iNextPosition,iStreamEnd,iFindStart,iFindEnd
Set objForm=Server.CreateObject("Scripting.Dictionary")
Set objFile=Server.CreateObject("Scripting.Dictionary")
If Request.TotalBytes<1 Then Exit Sub
Set FormStream = Server.CreateObject("AdoDB.Stream")
'将Form提交的数据写入FormStream流,并读取整个流到RequestData
FormStream.Type = 1 '1-adTypeBinary;2-adTypeText
FormStream.Mode = 3 '0-adModeUnknown;1-adModeRead;3-adModeReadWrite
FormStream.Open
FormStream.Write Request.BinaryRead(Request.TotalBytes)
iCachePosition=0
sCache=ReadCache(iCachePosition,100)
Set ItemStream = Server.CreateObject("ADODB.Stream")
CrLf = ChrB(13) & ChrB(10)
iStreamEnd = FormStream.Size
'取得表单域分隔字符串
sFormSplit = LeftB(sCache, InStrB(1,sCache,CrLf)-1)
iLenFormSplit = LenB (sFormSplit)
iCachePosition=iLenFormSplit
sCache=ReadCache(iCachePosition,iCacheShortSize)
While (iNextPosition+10) < iStreamEnd
iCachePoint=1
'取得Form Item Info结束位置
iInfoEnd = InStrB(iCachePoint,sCache,CrLf & CrLf)+3
'读取到sInfo
sInfo = SubStreamText(iCachePosition,iInfoEnd-iCachePoint)
'取得下一个表单域开始位置
mbFind=False
miFindPoint = InStrB(iInfoEnd,sCache,sFormSplit)
If miFindPoint Then
iNextPosition = iCachePosition+miFindPoint
mbFind = True
End If
miFindPosition = iCachePosition+iCacheShortSize-iLenFormSplit
Do While miFindPosition<iStreamEnd and (Not mbFind)
sCache=ReadCache(miFindPosition,iCacheSize)
miFindPoint = InStrB(1,sCache,sFormSplit)
If miFindPoint Then
iNextPosition = miFindPosition+miFindPoint
mbFind = True
End If
miFindPosition = miFindPosition+iCacheSize-iLenFormSplit
Loop
'取得表单项目名称
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'如果是文件
If InStr (45,sInfo,"filename=""",1) > 0 Then
Set theFile = New FileInfo
'取得文件名
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
theFile.FullPath = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'取得文件类型
iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'取得文件Start&Size
theFile.FileStart = iCachePosition+iInfoEnd
theFile.FileSize = iNextPosition - (iCachePosition+iInfoEnd) -3
theFile.FormName=sFormName
'添加FileInfo对象
If Not objFile.Exists(sFormName) Then objFile.Add sFormName,theFile
Else
'如果是表单项目
'读取到sFormValue
sFormValue = SubStreamText(iCachePosition+iInfoEnd,iNextPosition-(iCachePosition+iInfoEnd)-3)
'添加Form Item
If objForm.Exists(sFormName) Then
objForm(sFormName)=objForm(sFormName) & "," & sFormValue
Else
objForm.Add sFormName,sFormValue
End If
End If
iCachePosition=iNextPosition+iLenFormSplit
sCache=ReadCache(iCachePosition,iCacheShortSize)
iNextPosition=iCachePosition+1
WEnd
sCache=""
Set ItemStream =Nothing
End Sub
Private Function SubStreamText(Position,Length)
ItemStream.Type =1
ItemStream.Mode =3
ItemStream.Open
FormStream.Position = Position
FormStream.CopyTo ItemStream,Length
ItemStream.Position = 0
ItemStream.Type = 2
ItemStream.Charset ="GB2312"
SubStreamText = ItemStream.ReadText
ItemStream.Close
End Function
Private Function ReadCache(Position,Length)
FormStream.Position = Position
ReadCache = FormStream.Read(Length)
End Function
Private Function FindNextPosition()
End Function
Private Sub Class_Terminate
If Request.TotalBytes>0 Then
objForm.RemoveAll
objFile.RemoveAll
Set objForm=Nothing
Set objFile=Nothing
FormStream.Close
Set FormStream =Nothing
End If
Server.ScriptTimeOut=iScriptTimeOut
' Response.Write "执行时间:<FONT COLOR=red>" & FormatNumber((Timer()-dteBegin),6) & "</FONT>秒。"
End Sub
End Class
Class FileInfo
Private m_FormName,m_FullPath,m_FileType,m_FileSize,m_FileStart
Private Sub Class_Initialize
m_FormName = ""
m_FullPath = ""
m_FileSize = 0
m_FileStart = 0
m_FileType = ""
End Sub
Property Let FormName(value)
m_FormName=value
End Property
Property Get FormName()
FormName=m_FormName
End Property
Property Let FullPath(value)
m_FullPath=value
End Property
Property Get FullPath()
FullPath=m_FullPath
End Property
Property Get FileName()
FileName=GetFileName(m_FullPath)
End Property
Property Get FileExt()
FileExt=getFileExt(m_FullPath)
End Property
Property Let FileType(value)
m_FileType=value
End Property
Property Get FileType()
FileType=m_FileType
End Property
Property Let FileSize(value)
m_FileSize=value
End Property
Property Get FileSize()
FileSize=m_FileSize
End Property
Property Let FileStart(value)
m_FileStart=value
End Property
Public Function SaveAs(SaveFileName)
Dim FileStream,ErrorChar,i
SaveAs=False
If Not(Trim(SaveFileName)="" or m_FileStart=0 or FileName="" or Right(SaveFileName,1)="/") Then
Set FileStream=CreateObject("AdoDB.Stream")
FileStream.Mode=3
FileStream.Type=1
FileStream.Open
FormStream.Position=m_FileStart
FormStream.CopyTo FileStream,m_FileSize
FileStream.SaveToFile SaveFileName,2 '1-adSaveCreateNotExists;2-adSaveCreateOverwrite
FileStream.Close
Set FileStream=Nothing
SaveAs=True
End If
End Function
Public Function GetData()
GetData=""
If m_FileStart=0 Then Exit Function
If Not m_FileSize Then
FormStream.Position = m_FileStart
GetData=FormStream.Read(m_FileSize)
End If
End Function
Private Function GetFilePath(FullPath)
If FullPath = "" Then
GetFilePath = ""
Else
GetFilePath = Left(FullPath,InStrRev(FullPath, "/"))
End If
End Function
Private Function GetFileName(FullPath)
If FullPath = "" Then
GetFileName = ""
Else
GetFileName = Mid(FullPath,InStrRev(FullPath, "/")+1)
End If
End Function
Private Function GetFileExt(ByVal FullPath)
Dim iTmp
GetFileExt = ""
iTmp=InStrRev(FullPath, ".")
If Not iTmp Then GetFileExt = LCase(Mid(FullPath,iTmp))
End Function
End Class
Public Function GetTimeStr()
GetTimeStr=Cstr(Date()) & "-" & Int(Timer()*1000)
End Function
</SCRIPT>
- 文件上传类
- 文件上传类
- 单文件上传类
- C#文件上传类
- C#文件上传类
- 文件上传类.asp
- ASP文件上传类
- 文件上传的类
- 上传文件类!
- 多文件上传类
- C#文件上传类
- 文件上传类
- 文件上传类。
- Javascript上传文件类
- JAVA 上传文件类
- C#文件上传类
- PHP文件上传类
- 文件上传类
- Emacs命令集
- 如何和开发工程师交流-给测试工程师的一点建议
- 图片信息类
- 汉字简体繁体转换
- 在Linux下配置TCP/IP
- 文件上传类
- 去除通知栏过去的项目
- 终于找到vsftpd的配置文章,呵呵
- 校验码类
- MIME Formats in IIS5.0
- RedHat7.2下Apache与Tomcat4整合实例
- 试做LOGO一枚,自己也不是很满意。
- wu-ftpd服务器配置手册
- 下载文件(server.xml-tomcat5.x) - URIEcoding=GBK