561 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			561 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | <% | |||
|  | '========================================================= | |||
|  |  '类名: AnUpLoad(艾恩无组件上传类) | |||
|  |  '作者: Anlige | |||
|  |  '版本: 艾恩ASP无组件上传类V11.03.25 | |||
|  |  '开发日期: 2008-4-12 | |||
|  |  '修改日期: 2011-03025 | |||
|  |  '主页: http://dev.mo.cn | |||
|  |  'Email: zhanghuiguoanlige@126.com | |||
|  |  'QQ: 1034555083 | |||
|  | '========================================================= | |||
|  | Dim StreamT | |||
|  | Class AnUpLoad | |||
|  | 	Private Form, Fils | |||
|  | 	Private vCharSet, vMaxSize, vSingleSize, vErr, vVersion, vTotalSize, vExe, pID, vOP, vErrExe,vboundary, vLostTime, vMode, vFileCount | |||
|  | 	 | |||
|  | 	'============================== | |||
|  | 	'设置和读取属性开始 | |||
|  | 	'============================== | |||
|  | 	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) | |||
|  | 	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 ProcessID() | |||
|  | 		ProcessID = pID | |||
|  | 	End Property | |||
|  | 	 | |||
|  | 	Public Property Let openProcesser(ByVal value) | |||
|  | 		vOP = value | |||
|  | 	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 = "艾恩ASP无组件上传类V10.10.22" | |||
|  | 		vMaxSize = -1 | |||
|  | 		vSingleSize = -1 | |||
|  | 		vErr = -1 | |||
|  | 		vExe = "" | |||
|  | 		vTotalSize = 0 | |||
|  | 		vCharSet = "utf-8" | |||
|  | 		vOP=false | |||
|  | 		pID="AnUpload" | |||
|  | 		setApp "",0,0,"" | |||
|  | 		vMode = 0 | |||
|  | 	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 | |||
|  | 		StreamT.Close() | |||
|  | 		Set StreamT = Nothing | |||
|  | 	End Sub | |||
|  | 	 | |||
|  | 	'============================== | |||
|  | 	'函数名:GetData | |||
|  | 	'作用:处理客户端提交来的所有数据 | |||
|  | 	'============================== | |||
|  | 	Public Sub GetData() | |||
|  | 		Dim time1 | |||
|  | 		time1 = timer() | |||
|  | 		if vOP And trim(request.querystring("processid"))<>"" then pID=request.querystring("processid") | |||
|  | 		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 | |||
|  | 		'下面3句注释掉了,因为在IIS5.0中,如果上传大小大于限制大小的文件,会出错,一直没找到解决方法。如果是在IIS5以上的版本使用,可以取消下面3句的注释 | |||
|  | 		'If Not ef Then | |||
|  | 			'If vMaxSize > 0 And TotalBytes > vMaxSize Then ef = true : vErr = 1 | |||
|  | 		'End If | |||
|  | 		If ef Then Exit Sub | |||
|  | 		If vMode = 0 Then | |||
|  | 			vTotalSize = 0  | |||
|  | 			StreamT.Type = 1 | |||
|  | 			StreamT.Mode = 3 | |||
|  | 			StreamT.Open | |||
|  | 			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 | |||
|  | 				setApp "uploading",TotalBytes,BytesRead,"" | |||
|  | 			Loop | |||
|  | 			setApp "uploaded",TotalBytes,BytesRead,"" | |||
|  | 			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) | |||
|  |             formhead = MidB(tempdata, istart, formend - istart) | |||
|  |             str = Bytes2Str(formhead) | |||
|  |             startpos = InStr(str, "name=""") + 6 | |||
|  |             endpos = InStr(startpos, str, """") | |||
|  |             formname = LCase(Mid(str, startpos, endpos - startpos)) | |||
|  |             valueend = InStrB(formend + 3, tempdata, sSplit) | |||
|  | 			If InStr(str, "filename=""") > 0 Then | |||
|  | 				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 | |||
|  | 					LocalName = FileName | |||
|  | 					FileName = Replace(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 | |||
|  | 						vErr = 4 | |||
|  | 						tempdata = empty | |||
|  | 						Exit Sub | |||
|  | 					Else | |||
|  | 						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 | |||
|  | 				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 | |||
|  | 	 | |||
|  | 	Public sub setApp(stp,total,current,desc) | |||
|  | 		Application.lock() | |||
|  | 		Application(pID)="{ID:""" & pID & """,step:""" & stp & """,total:" & total & ",now:" & current & ",description:""" & desc & """,dt:""" & now() & """}" | |||
|  | 		Application.unlock() | |||
|  | 	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 = "数据处理完毕!" | |||
|  | 			Case 1 | |||
|  | 				GetErr = "上传数据超过" & GetSize(vMaxSize) & "限制!可设置MaxSize属性来改变限制!" | |||
|  | 			Case 2 | |||
|  | 				GetErr = "未设置上传表单enctype属性为multipart/form-data或者未设置method属性为Post,上传无效!" | |||
|  | 			Case 3 | |||
|  | 				GetErr = "含有非法扩展名(" & vErrExe & ")文件!只能上传扩展名为" & Replace(vExe, "|", ",") & "的文件" | |||
|  | 			Case 4 | |||
|  | 				GetErr = "对不起,程序不允许使用相同name属性的文件域!" | |||
|  | 			Case 5 | |||
|  | 				GetErr = "单个文件大小超出" & GetSize(vSingleSize) & "的上传限制!" | |||
|  | 		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 = 0 | |||
|  | 		r = CInt(Rnd() * 10000) | |||
|  | 		S = right("0000" & r,4) | |||
|  | 		Getname = y & m & d & h & mm & S & r | |||
|  | 	End Function | |||
|  | 	 | |||
|  | 	'============================== | |||
|  | 	'检测上传类型是否为multipart/form-data | |||
|  | 	'============================== | |||
|  | 	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 | |||
|  | 	 | |||
|  | 	'============================== | |||
|  | 	'获取上传表单值,参数可选,如果为-1则返回一个包含所有表单项的一个dictionary对象 | |||
|  | 	'============================== | |||
|  | 	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 | |||
|  | 	 | |||
|  | 	'============================== | |||
|  | 	'获取上传的文件类,参数可选,如果为-1则返回一个包含所有上传文件类的一个dictionary对象 | |||
|  | 	'============================== | |||
|  | 	Public Function Files(ByVal formname) | |||
|  | 		If trim(formname) = "-1" Then | |||
|  | 			Set Files = Fils | |||
|  | 		Else | |||
|  | 			If Fils.Exists(LCase(formname)) Then | |||
|  | 				Set Files = Fils(LCase(formname)) | |||
|  | 			Else | |||
|  | 				Set Files = Nothing | |||
|  | 			End If | |||
|  | 		End If | |||
|  | 	End Function | |||
|  | End Class | |||
|  | 
 | |||
|  | Class UploadFileEx | |||
|  | 	Private mvarFormName , mvarNewName , mvarLocalName , mvarFileName , mvarUserSetName , mvarContentType ,mException,mvarPosition | |||
|  | 	Private mvarSize , mvarValue , mvarPath , mvarExtend ,mvarWidth, mvarHeight | |||
|  | 	 | |||
|  | 	Public Property Let Extend(ByVal vData ) | |||
|  | 		mvarExtend = vData | |||
|  | 	End Property | |||
|  | 	Public Property Get Extend()  | |||
|  | 		Extend = mvarExtend | |||
|  | 	End Property | |||
|  | 
 | |||
|  | 	Public Property Get Width()  | |||
|  | 		Width = mvarWidth | |||
|  | 	End Property | |||
|  | 	 | |||
|  | 	Public Property Get Height()  | |||
|  | 		Height = mvarHeight | |||
|  | 	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 | |||
|  | 		mvarWidth = 0 | |||
|  | 		mvarHeight = 0 | |||
|  | 	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 | |||
|  | 		If Not Err Then | |||
|  | 			Set SaveToFile = objFromJson("{error:false}") | |||
|  | 		Else | |||
|  | 			Set SaveToFile = objFromJson("{error:true,description:'" & replace(Err.Description,"'","\'") & "'}") | |||
|  | 			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 Function | |||
|  | End Class | |||
|  | %> | |||
|  | <script language="jscript" runat="server"> | |||
|  | 	function objFromJson(str){ | |||
|  | 		eval("var _temp=(" + str + ");"); | |||
|  | 		return _temp; | |||
|  | 	} | |||
|  | </script> |