繁体中文
设为首页
加入收藏
当前位置:ASP技术首页 >> ASP基础 >> 纯asp分离FORM数据中的二进制文件和文本数据

纯asp分离FORM数据中的二进制文件和文本数据

2006-07-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:以下源代码为一个文件 &H80 Then gbcode2=AscB(MidB(BinStr,j+1,1)) a=gbcode1-&H81 b=gbcode2-&H40 If gbcode2>&H7f Then b=b-1 GBToU=GBToU & ChrW(GB2U(a*190+b)) 'GB2U为转换表 j=j+1 Else GBToU=GBToU & Ch...

以下源代码为一个文件

<%

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'作者:playxp,Email:playxp@sohu.com有问题请与我联系

'功能:纯ASP分离FORM数据中的二进制文件和文本数据(支持中文)。

'使用方法:将此文件包含在处理form的ASP文件中,使用GetValue(name)来读取表单中各个元素的值。

'注意:一定不要使用request.form来读取数据。

'在绝大数的支持ASP的主页空间仅能使用有限的组件,不能使用上传组件,而内置的Request对象又不

'支持读取二进制文件,因此使用该文件可以解决上传文件困难的弊病,但在性能上却大打折扣。本程序参考了网上的一些代码。

'由GBK向UNICODE转换

Function GBToU(BinStr,byteNum)

GBToU=""

For j=1 To byteNum

gbcode1=AscB(MidB(BinStr,j,1))

If gbcode1>&H80 Then

gbcode2=AscB(MidB(BinStr,j+1,1))

a=gbcode1-&H81

b=gbcode2-&H40

If gbcode2>&H7f Then b=b-1

GBToU=GBToU & ChrW(GB2U(a*190+b)) 'GB2U为转换表

j=j+1

Else

GBToU=GBToU & ChrW(AscB(MidB(BinStr,j,1)))

End If

Next

End Function

'得到边界字符串

boundary=Mid(Request.ServerVariables("CONTENT_TYPE"),31)

'Form中数据的字节数

byteCount=Request.TotalBytes

'Form中的二进制数据

binRead=Request.BinaryRead(byteCount)

'边界ASCII字符串

endStr=ChrB(13)&ChrB(10)&ChrB(45)&ChrB(45)

For i=1 To Len(boundary)

endStr=endStr&ChrB(AscB(Mid(boundary,i,1)))

Next

Dim FormValue(31,3)

Dim byteI '字节指针

E=0

byteI=37+Len(boundary) '第一个元素数据开始处

Do While byteI

If AscB(MidB(binRead,byteI,1))=110 Then '元素数据存在

FormValue(E,0)=""

FormValue(E,1)=""

FormValue(E,2)=""

FormValue(E,3)=""

byteI=byteI+6 '名字开始处

nameStart=byteI

byteI=InStrB(byteI,binRead,ChrB(34)) '名字结束处

nameLen=byteI-nameStart '名字长度

FormValue(E,0)=GBToU(MidB(binRead,nameStart,nameLen),nameLen) '读入名字

If AscB(MidB(binRead,byteI+1,1))=13 Then '元素为文本

byteI=byteI+5 '文本数据开始处

dataStart=byteI

byteI=InStrB(byteI,binRead,endStr) '文本数据结束处

dataLen=byteI-dataStart '文本数据长度

FormValue(E,1)=GBToU(MidB(binRead,dataStart,dataLen),dataLen) '读入文本数据

Else '元素为文件

byteI=byteI+13 '路径开始处

pathStart=byteI

byteI=InStrB(byteI,binRead,ChrB(34)) '路径结束处

pathLen=byteI-pathStart

FormValue(E,2)=GBToU(MidB(binRead,pathStart,pathLen),pathLen) '读入路径

byteI=byteI+17 '文件类型开始

typeStart=byteI

byteI=InStrB(byteI,binRead,ChrB(13)) '文件类型结束处

typeLen=byteI-typeStart '文件类型长度

FormValue(E,3)=GBToU(MidB(binRead,typeStart,typeLen),typeLen) '读入文件类型

byteI=byteI+4 '文件数据开始处

dataStart=byteI

byteI=InStrB(byteI,binRead,endStr) '文件数据结束处

dataLen=byteI-dataStart '文件数据长度

FormValue(E,1)=MidB(binRead,dataStart,dataLen) '读入文件数据

End If

byteI=byteI+38+Len(boundary) '移向下一元素数据开始处

E=E+1

Else

Exit Do

End If

Loop

'根据元素名来检索元素数据

'如果表单元素为文本数据直接返回其值

'如果表单元素为二进制数据文件,则返回一3元素数组,第一个元素为文件的二进制数据,

'第二个元素为文件的路径,第三个为文件的类型。

Function GetValue(name)

For i=0 To 31

If StrComp(FormValue(i,0),name,1)=0 Then

If FormValue(i,3)="" Then

GetValue=FormValue(i,1)

Else

GetValue=Array(FormValue(i,1),FormValue(i,2),FormValue(i,3))

End If

Exit Function

End If

Next

GetValue=Null

End Function

%>

责任编辑:admin
相关文章