| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554 | <%'========================================================= 'Class: AnUpLoad 'Author: Anlige 'Version:AienAspUpload V13.12.09 'CreationDate: 2008-04-12 'ModificationDate: 2013-12-09 'Homepage: http://dev.mo.cn 'Email: zhanghuiguoanlige@126.com 'QQ: 1034555083'=========================================================Dim StreamTClass AnUpLoad	Private Form, Fils	Private vCharSet, vMaxSize, vSingleSize, vErr, vVersion, vTotalSize, vExe, vErrExe,vboundary, vLostTime, vMode, vFileCount,StreamOpened	private vMuti,vServerVersion	Public Property Let Mode(ByVal value)		vMode = value	End Property		Public Property Let MaxSize(ByVal value)		vMaxSize = value	End Property		Public Property Let SingleSize(ByVal value)		vSingleSize = value	End Property		Public Property Let Exe(ByVal value)		vExe = LCase(value)		vExe = replace(vExe,"*.","")		vExe = replace(vExe,";","|")	End Property		Public Property Let CharSet(ByVal value)		vCharSet = value	End Property		Public Property Get ErrorID()		ErrorID = vErr	End Property		Public Property Get FileCount()		FileCount = Fils.count	End Property		Public Property Get Description()		Description = GetErr(vErr)	End Property		Public Property Get Version()		Version = vVersion	End Property		Public Property Get TotalSize()		TotalSize = vTotalSize	End Property		Public Property Get LostTime()		LostTime = vLostTime	End Property		Private Sub Class_Initialize()		set Form = server.createobject("Scripting.Dictionary")		set Fils = server.createobject("Scripting.Dictionary")		Set StreamT = server.CreateObject("Adodb.stream")		vVersion = "AienAspUpload V13.12.09"		vMaxSize = -1		vSingleSize = -1		vErr = -1		vExe = ""		vTotalSize = 0		vCharSet = "gb2312"		vMode = 0		StreamOpened=false		vMuti="_" & Getname() & "_"		vServerVersion = 6.0		Dim t_		t_ = lcase(Request.ServerVariables("SERVER_SOFTWARE"))		t_ = replace(t_,"microsoft-iis/","")		if isnumeric(t_) then vServerVersion = cdbl(t_)	End Sub		Private Sub Class_Terminate()		Dim f		Form.RemoveAll()		For each f in Fils 			Fils(f).value=empty			Set Fils(f) = Nothing		Next		Fils.RemoveAll()		Set Form = Nothing		Set Fils = Nothing		if StreamOpened then StreamT.close()		Set StreamT = Nothing	End Sub		Public Sub GetData()		Dim time1		time1 = timer()		Dim value, str, bcrlf, fpos, sSplit, slen, istart,ef		Dim TotalBytes,tempdata,BytesRead,ChunkReadSize,PartSize,DataPart,formend, formhead, startpos, endpos, formname, FileName, fileExe, valueend, NewName,localname,type_1,contentType		TotalBytes = Request.TotalBytes		ef = false		If checkEntryType = false Then ef = true : vErr = 2		If vServerVersion>=6 Then			If Not ef Then				If vMaxSize > 0 And TotalBytes > vMaxSize Then ef = true : vErr = 1			End If		End If		If ef Then Exit Sub		If vMode = 0 Then			vTotalSize = 0 			StreamT.Type = 1			StreamT.Mode = 3			StreamT.Open			StreamOpened = true			BytesRead = 0			ChunkReadSize = 1024 * 16			Do While BytesRead < TotalBytes				PartSize = ChunkReadSize				If PartSize + BytesRead > TotalBytes Then PartSize = TotalBytes - BytesRead				DataPart = Request.BinaryRead(PartSize)				StreamT.Write DataPart				BytesRead = BytesRead + PartSize			Loop			StreamT.Position = 0			tempdata = StreamT.Read		Else			tempdata = Request.BinaryRead(TotalBytes)		End If		bcrlf = ChrB(13) & ChrB(10)		fpos = InStrB(1, tempdata, bcrlf)        sSplit = MidB(tempdata, 1, fpos - 1)		slen = LenB(sSplit)		istart = slen + 2        Do            formend = InStrB(istart, tempdata, bcrlf & bcrlf)            if formend<=0 then exit do            formhead = MidB(tempdata, istart, formend - istart)            str = Bytes2Str(formhead)            startpos = InStr(str, "name=""") + 6            if startpos<=0 then exit do            endpos = InStr(startpos, str, """")            if endpos<=0 then exit do            formname = LCase(Mid(str, startpos, endpos - startpos))            valueend = InStrB(formend + 3, tempdata, sSplit)            if valueend<=0 then exit do			If InStr(str, "filename=""") > 0 Then				formname = formname & vMuti & "0"				startpos = InStr(str, "filename=""") + 10				endpos = InStr(startpos, str, """")				type_1=instr(endpos,lcase(str),"content-type")				contentType=trim(mid(str,type_1+13))				FileName = Mid(str, startpos, endpos - startpos)				If Trim(FileName) <> "" Then					FileName = Replace(FileName, "/", "\")					FileName = Replace(FileName, chr(0), "")					LocalName = FileName					FileName = Mid(FileName, InStrRev(FileName, "\") + 1)					If instr(FileName,".")>0 Then						fileExe = Split(FileName, ".")(UBound(Split(FileName, ".")))					else						fileExe = ""					End If					If vExe <> "" Then						If checkExe(fileExe) = True Then							vErr = 3							vErrExe = fileExe							tempdata = empty							Exit Sub						End If					End If					NewName = Getname()					NewName = NewName & "." & fileExe					vTotalSize = vTotalSize + valueend - formend - 6					If vSingleSize > 0 And (valueend - formend - 6) > vSingleSize Then						vErr = 5						tempdata = empty						Exit Sub					End If					If vMaxSize > 0 And vTotalSize > vMaxSize Then						vErr = 1						tempdata = empty						Exit Sub					End If					If Fils.Exists(formname) Then formname = GetNextFormName(formname)					Dim fileCls:set fileCls= new UploadFileEx					fileCls.ContentType=contentType					fileCls.Size = (valueend - formend - 6)					fileCls.Position = (formend + 3)					fileCls.FormName = formname					fileCls.NewName = NewName					fileCls.FileName = FileName					fileCls.LocalName = FileName					fileCls.extend=split(NewName,".")(ubound(split(NewName,".")))					Fils.Add formname, fileCls					Set fileCls = Nothing				End If			Else				value = MidB(tempdata, formend + 4, valueend - formend - 6)				If Form.Exists(formname) Then					Form(formname) = Form(formname) & "," & Bytes2Str(value)				Else					Form.Add formname, Bytes2Str(value)				End If			End If            istart = valueend + 2 + slen        Loop Until (istart + 2) >= LenB(tempdata)		vErr = 0		tempdata = empty		vLostTime = FormatNumber((timer-time1)*1000,2)	End Sub		Private Function CheckExe(ByVal ex)		Dim notIn: notIn = True		If vExe="*" then			notIn=false 		elseIf InStr(1, vExe, "|") > 0 Then			Dim tempExe: tempExe = Split(vExe, "|")			Dim I: I = 0			For I = 0 To UBound(tempExe)				If LCase(ex) = tempExe(I) Then					notIn = False					Exit For				End If			Next		Else			If vExe = LCase(ex) Then				notIn = False			End If		End If		checkExe = notIn	End Function		Public Function GetSize(ByVal Size)		If Size < 1024 Then			GetSize = FormatNumber(Size, 2) & "B"		ElseIf Size >= 1024 And Size < 1048576 Then			GetSize = FormatNumber(Size / 1024, 2) & "KB"		ElseIf Size >= 1048576 Then			GetSize = FormatNumber((Size / 1024) / 1024, 2) & "MB"		End If	End Function		Private Function Bytes2Str(ByVal byt)		If LenB(byt) = 0 Then			Bytes2Str = ""			Exit Function		End If		Dim mystream, bstr		Set mystream =server.createobject("ADODB.Stream")		mystream.Type = 2		mystream.Mode = 3		mystream.Open		mystream.WriteText byt		mystream.Position = 0		mystream.CharSet = vCharSet		mystream.Position = 2		bstr = mystream.ReadText()		mystream.Close		Set mystream = Nothing		Bytes2Str = bstr	End Function		Private Function GetErr(ByVal Num)		Select Case Num			Case 0				GetErr = "COMPLETE"			Case 1				GetErr = "ERROR_FILE_EXCEEDS_MAXSIZE_LIMIT"			Case 2				GetErr = "ERROR_INVALID_ENCTYPEOR_METHOD"			Case 3				GetErr = "ERROR_INVALID_FILETYPE(." & ucase(vErrExe) & ")"			Case 5				GetErr = "ERROR_FILE_EXCEEDS_SIZE_LIMIT"		End Select	End Function		Private Function Getname()		Dim y, m, d, h, mm, S, r		Randomize		y = Year(Now)		m = right("0" & Month(Now),2)		d = right("0" & Day(Now),2)		h = right("0" & Hour(Now),2)		mm =right("0" & Minute(Now),2)		S = right("0" & Second(Now),2)		r = CInt(Rnd() * 10000)		r = right("0000" & r,4)		Getname = y & m & d & h & mm & S & r	End Function		Private Function checkEntryType()		Dim ContentType, ctArray, bArray,RequestMethod		RequestMethod=trim(LCase(Request.ServerVariables("REQUEST_METHOD")))		if RequestMethod="" or RequestMethod<>"post" then			checkEntryType = False			exit function		end if		ContentType = LCase(Request.ServerVariables("HTTP_CONTENT_TYPE"))		ctArray = Split(ContentType, ";")		if ubound(ctarray)>=0 then			If Trim(ctArray(0)) = "multipart/form-data" Then			checkEntryType = True			vboundary = Split(ContentType,"boundary=")(1)			Else			checkEntryType = False			End If		else			checkEntryType = False		end if	End Function		Public Function Forms(ByVal formname)		If trim(formname) = "-1" Then			Set Forms = Form		Else			If Form.Exists(LCase(formname)) Then				Forms = Form(LCase(formname))			Else				Forms = ""			End If		End If	End Function		Public Function Files(ByVal formname)		If trim(formname) = "-1" Then			Set Files = Fils		Else			dim vname			vname = LCase(formname) & vMuti & "0"			if instr(formname,vMuti)>0 then vname = formname			If Fils.Exists(vname) Then				Set Files = Fils(vname)			Else				Set Files = New UploadFileEmpty			End If		End If	End Function		Public Function Files_Muti(ByVal formname,byval index)		If trim(formname) = "-1" Then			Set Files_Muti = Fils		Else			If Fils.Exists(LCase(formname) & vMuti & index) Then				Set Files_Muti = Fils(LCase(formname) & vMuti & index)			Else				Set Files_Muti = New UploadFileEmpty			End If		End If	End Function			Public Function QuickSave(ByVal formname,Byval SavePath)		Dim v, formStart,File,Result,SucceedCount		SucceedCount = 0		Dim TempFormName		TempFormName = formname & vMuti		For Each v In Fils			If lcase(left(v,len(TempFormName))) = lcase(TempFormName) Then				Set File = Fils(v)				Result = File.saveToFile(SavePath,0,True)				If Result Then SucceedCount = SucceedCount + 1				'Set File=Nothing			End If		Next		QuickSave = SucceedCount	End Function			Private Function GetNextFormName(byval formname)		Dim formStart,currentIndex		formStart = left(formname,instr(formname,vMuti)+len(vMuti)-1)		currentIndex = mid(formname,instr(formname,vMuti)+len(vMuti))		currentIndex =cint(currentIndex)		do while Fils.Exists(formname)			currentIndex = currentIndex + 1			formname = formStart & currentIndex		loop		GetNextFormName = formname	End FunctionEnd ClassClass UploadFileEmpty	Public Property Get IsFile() 		IsFile = false	End PropertyEnd ClassClass UploadFileEx	Private mvarFormName , mvarNewName , mvarLocalName , mvarFileName , mvarUserSetName , mvarContentType ,mException,mvarPosition	Private mvarSize , mvarValue , mvarPath , mvarExtend		Public Property Let Extend(ByVal vData )		mvarExtend = vData	End Property	Public Property Get Extend() 		Extend = mvarExtend	End Property		Public Property Get IsFile() 		IsFile = true	End Property			Public Property Let Path(ByVal vData )		mvarPath = vData	End Property	Public Property Get Path() 		Path = mvarPath	End Property		Public Property Get Exception() 		Exception = mException	End Property		Public Property Let Value(ByVal vData )		mvarValue = vData	End Property		Public Property Get Value() 		Value = mvarValue	End Property		Public Property Let Size(ByVal vData )		mvarSize = vData	End Property	Public Property Get Size() 		Size = mvarSize	End Property	Public Property Let Position(ByVal vData )		mvarPosition = vData	End Property	Public Property Get Position() 		Size = mvarPosition	End Property			Public Property Let ContentType(ByVal vData )		mvarContentType = vData	End Property	Public Property Get ContentType() 		ContentType = mvarContentType	End Property		Public Property Let UserSetName(ByVal vData )		mvarUserSetName = vData	End Property	Public Property Get UserSetName() 		UserSetName = mvarUserSetName	End Property		Public Property Let FileName(ByVal vData )		mvarFileName = vData	End Property	Public Property Get FileName() 		FileName = mvarFileName	End Property		Public Property Let LocalName(ByVal vData )		mvarLocalName = vData	End Property	Public Property Get LocalName() 		LocalName = mvarLocalName	End Property		Public Property Let NewName(ByVal vData )		mvarNewName = vData	End Property	Public Property Get NewName() 		NewName = mvarNewName	End Property		Public Property Let FormName(ByVal vData )		mvarFormName = vData	End Property	Public Property Get FormName() 		FormName = mvarFormName	End Property		Private Sub Class_Initialize()		mvarSize =0		mvarFormName = ""	End Sub		Public Function SaveToFile(ByVal Path , byval tOption, byval OverWrite)		On Error Resume Next		Dim IsP 		IsP = (InStr(Path, ":") = 2)		If Not IsP Then Path = Server.MapPath(Path)		Path = Replace(Path, "/", "\")		If Mid(Path, Len(Path) - 1) <> "\" Then Path = Path + "\"		CreateFolder Path		mvarPath = Path		If tOption = 1 Then			Path = Path & mvarLocalName: mvarFileName = mvarLocalName		Else			If tOption = -1 And mvarUserSetName <> "" Then				Path = Path & mvarUserSetName & "." & mvarExtend: mvarFileName = mvarUserSetName & "." & mvarExtend			Else				Path = Path & mvarNewName: mvarFileName = mvarNewName			End If		End If		If Not OverWrite Then			Path = GetFilePath()		End If		Dim tmpStrm		Set tmpStrm =server.CreateObject("ADODB.Stream")		tmpStrm.Mode = 3		tmpStrm.Type = 1		tmpStrm.Open		StreamT.Position = mvarPosition		StreamT.copyto tmpStrm,mvarSize		tmpStrm.SaveToFile Path, 2		tmpStrm.Close		Set tmpStrm = Nothing		'Set SaveToFile = new ErrorMessage_		If Not Err Then			SaveToFile = true		Else			SaveToFile = false			mException=Err.Description		End If	End Function	Public Function GetBytes()		StreamT.Position = mvarPosition		GetBytes = StreamT.read(mvarSize)	End Function	Private Function CreateFolder(ByVal folderPath )		Dim oFSO		Set oFSO = server.CreateObject("Scripting.FileSystemObject")		Dim sParent 		sParent = oFSO.GetParentFolderName(folderPath)		If sParent = "" Then Exit Function		If Not oFSO.FolderExists(sParent) Then CreateFolder (sParent)		If Not oFSO.FolderExists(folderPath) Then oFSO.CreateFolder (folderPath)		Set oFSO = Nothing	End Function		Private Function GetFilePath() 		Dim oFSO, Fname , FNameL , i 		i = 0		Set oFSO = server.CreateObject("Scripting.FileSystemObject")		Fname = mvarPath & mvarFileName		FNameL = Mid(mvarFileName, 1, InStr(mvarFileName, ".") - 1)		Do While oFSO.FileExists(Fname)			Fname = mvarPath & FNameL & "(" & i & ")." & mvarExtend			mvarFileName = FNameL & "(" & i & ")." & mvarExtend			i = i + 1		Loop		Set oFSO = Nothing		GetFilePath = Fname	End FunctionEnd Class%>
 |