ASP 抓取 enctype="multipart/form-data" 编码过的数据

由 非洲饿鱼 于 星期四, 03/15/2007 - 16:21 发表

使用INDY http post TIdMultiPartFormDataStream 格式数据后会出现ASP不能以Post方式不能取数据,但我测试法发现PHP并没有这个毛病,ASP解决办法:



Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)

Function GetFormVal(FormName)
	GetFormVal = ""
	StartPos = LenB(Divider) + 2
	FormName = Chr(34) & FormName & Chr(34)
	Do While StartPos > 0
		strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
		SearchStr = MidB(FormData, StartPos, strlen)
		If InStr(bin2str(SearchStr), FormName) > 0 Then
			ValStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
			ValLen = InStrB(StartPos, FormData, Divider) - 2 - ValStart
			ValContent = MidB(FormData, ValStart, ValLen)
			If GetFormVal <> "" Then
				GetFormVal = GetFormVal & "," & bin2str(ValContent)
			Else
				GetFormVal = bin2str(ValContent)
			End If
		End If
		If InStrB(StartPos, FormData, Divider) < 1 Then
			Exit Do
		End If
		StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
	Loop
End Function

Function bin2str(binstr)
	Dim varlen, clow, ccc, skipflag
	skipflag = 0
	ccc = ""
	varlen = LenB(binstr)
	For i = 1 To varlen
		If skipflag = 0 Then
			clow = MidB(binstr, i, 1)
			If AscB(clow) > 127 Then
				ccc = ccc & Chr(AscW(MidB(binstr, i + 1, 1) & clow))
				skipflag = 1
			Else
				ccc = ccc & Chr(AscB(clow))
			End If
		Else
			skipflag = 0
		End If
	Next
	bin2str = ccc
End Function

Function str2bin(str)
	For i = 1 To Len(str)
		str2bin = str2bin & ChrB(Asc(Mid(str, i, 1)))
	Next
End Function

Response.Write GetFormVal("T1")


代码来源:
http://www.pro-soho.com/Blog/article.asp?id=252

同步内容
Drupal theme by Kiwi Themes.