

<%
Dim oUpFileStream
Class UpFile_Class

	Dim Form, File, Version, Err 

	Private Sub Class_Initialize
		Err = -1
	End Sub

	Private Sub Class_Terminate	
		If Err < 0 Then
			Form.RemoveAll
			Set Form = Nothing
			File.RemoveAll
			Set File = Nothing
			oUpFileStream.Close
			Set oUpFileStream = Nothing
		End If
	End Sub

	Public Sub GetData(MaxSize)
		Dim RequestBinData, sSpace, bCrLf, sInfo, iInfoStart, iInfoEnd, tStream, iStart, oFileInfo
		Dim iFileSize, sFilePath, sFileType, sFormValue, sFileName
		Dim iFindStart, iFindEnd
		Dim iFormStart, iFormEnd, sFormName

		If Request.TotalBytes < 1 Then
			Err = 1
			Exit Sub
		End If
		If MaxSize > 0 Then
			If Request.TotalBytes > MaxSize Then
				Err = 2
				'Exit Sub
			End If
		End If
		Set Form = Server.CreateObject("Scripting.Dictionary")
		Form.CompareMode = 1
		Set File = Server.CreateObject("Scripting.Dictionary")
		File.CompareMode = 1
		Set tStream = Server.CreateObject("ADODB." & "Stream")
		Set oUpFileStream = Server.CreateObject("ADODB." & "Stream")
		oUpFileStream.Type = 1
		oUpFileStream.Mode = 3
		oUpFileStream.Open 
		oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)
		oUpFileStream.Position = 0
		RequestBinData = oUpFileStream.Read 
		iFormEnd = oUpFileStream.Size
		bCrLf = ChrB(13) & ChrB(10)

		sSpace = MidB(RequestBinData,1, InStrB(1,RequestBinData,bCrLf)-1)
		iStart = LenB(sSpace)
		iFormStart = iStart+2
		Do
			iInfoEnd = InStrB(iFormStart,RequestBinData,bCrLf & bCrLf)+3
			tStream.Type = 1
			tStream.Mode = 3
			tStream.Open
			oUpFileStream.Position = iFormStart
			oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
			tStream.Position = 0
			tStream.Type = 2
			tStream.CharSet = "gb2312"
			sInfo = tStream.ReadText

			iFormStart = InStrB(iInfoEnd,RequestBinData,sSpace)-1
			iFindStart = InStr(22,sInfo,"name=""",1)+6
			iFindEnd = InStr(iFindStart,sInfo,"""",0)
			sFormName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)

			If InStr(45,sInfo,"filename=""",1) > 0 Then
				Set oFileInfo = new FileInfo_Class
				iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
				iFindEnd = InStr(iFindStart,sInfo,"""",0)
				sFileName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
				oFileInfo.FileName = Mid(sFileName,InStrRev(sFileName, "\")+1)
				oFileInfo.FilePath = Left(sFileName,InStrRev(sFileName, "\"))
				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.add sFormName,oFileInfo
			else
				tStream.Close
				tStream.Type = 1
				tStream.Mode = 3
				tStream.Open
				oUpFileStream.Position = iInfoEnd 
				oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
				tStream.Position = 0
				tStream.Type = 2
				tStream.CharSet = "gb2312"
				sFormValue = tStream.ReadText
				If Form.Exists(sFormName) Then
					Form(sFormName) = Form(sFormName) & ", " & sFormValue
				Else
					form.Add sFormName,sFormValue
				End If
			End If
			tStream.Close
			iFormStart = iFormStart+iStart+2

		Loop Until (iFormStart+2) >= iFormEnd 
		RequestBinData = ""
		Set tStream = Nothing
	End Sub
End Class

Class FileInfo_Class

	Dim FormName, FileName, FilePath, FileSize, FileType, FileStart, FileExt

	Public Function SaveToFile(Path)
		On Error Resume Next
		Dim oFileStream
		Set oFileStream = CreateObject("ADODB." & "Stream")
		oFileStream.Type = 1
		oFileStream.Mode = 3
		oFileStream.Open
		oUpFileStream.Position = FileStart
		oUpFileStream.CopyTo oFileStream,FileSize
		oFileStream.SaveToFile Path,2
		oFileStream.Close
		Set oFileStream = Nothing 
	End Function

	Public Function FileData
		oUpFileStream.Position = FileStart
		FileData = oUpFileStream.Read(FileSize)
	End Function

End Class
%>
