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

二进制|数据

以下源代码为一个文件

<%
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'作者: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<byteCount
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
%>

时间: 2025-01-30 02:48:58

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

ios-IOS&amp;amp;amp;Android开发:如何从大量未加载的数据中加载一定量的数据到列表中

问题描述 IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中 绝大多数新闻资讯类应用开发过程中都会遇到这么一个问题: 规定每次从服务器最多只能获取20条数据,第一次刷新获取了20条最新的数据,添加到列表中,过一段时间有了30条未刷新的记录,这下问题来了:第二次刷新时是获取最新的20条还是接着第一次获取之后的20条数据放在列表前面?前者会导致列表中间空缺一部分数据,后者问题是要多刷新几次才能把所有数据获取到. 有过相关开发经验的大神们来说说你们的解决方案. 解决方案 刷新

软件-蓝牙数据中被插入了其他数据

问题描述 蓝牙数据中被插入了其他数据 太奇怪了,今天客户反应用我们的软件和智能硬件同步的时候同步失败.我让他发了连接日志. 奇怪的是日志里竟然过出来一些数据,这些数据竟然还是软件的包名 怎么回事 解决方案 批量将数据插入MySQL数据库的PHP代码

JS从一组数据中找到指定的单条数据的方法_javascript技巧

下面小编给大家介绍基于js如何从一组数据中找到指定的单条数据.具体方法如下所示: 在一般情况下,我们会要求后端在列表的时候输出一堆列表的JSON数据给我们,然后我们把这堆数据循环,就能在前端上显示列表了. 而我们在内容页的时候,则要求输出一个内容页的JSON数据给我们,我们就可以做内容页了. 但是,有时候,数据并不是特别复杂,我们可能需要从列表的数据中指定其中的单条数据.怎么做呢? 标准答案,find方法 var json = [{"id":1,"name":&qu

json-获取JSON数据中没有的标签的数据(因为要获取的标签有时有有时没有)

问题描述 获取JSON数据中没有的标签的数据(因为要获取的标签有时有有时没有) 如下JSON数据 { "weatherinfo": { "city": "厦门", "city_en": "xiamen", "date_y": "2014年3月4日", "date": "", "week": "星期二

asp.net2.0(C#)中嵌入哪个在线文本编辑器最好用啊? 哪个功能最强大?

问题描述 asp.net2.0(C#)中嵌入哪个在线文本编辑器最好用啊?哪个功能最强大?最近接手做了一个网站,想请大家推荐一个功能强大的文本编辑器哪有下载地址?谢谢提供下载地址 解决方案 解决方案二:hhfeditor0417www.baidu.com搜下解决方案三:FC不错解决方案四:以前在ASP里面用过eWebEditor,还可以,但是在asp.net里的eWebEditor最高版本是3.0,那些商业版的找不到hhfeditor0417FCeWebEditor以上三个哪个好?对.net平台支

在Form域中Post大于100K的数据

数据 当表单发送的数据量很大时,就会报错.查阅MSDN了解到,原因是微软对用Request.Form()可接收的最大数据有限制,IIS4中为80K字节,IIS5中为100K字节. 下面是微软提供的几个解决方法: 1.用Request.BinaryRead 代替 Request.Form方法 来解析表单数据: 2.使用文件上传方案,比如:Microsoft Posting Acceptor: 3.由于102399字节的限制是对每个表单元素的,所以在提交时,把表单元素内容大于102399的分隔成多个

Java中使用正则表达式处理文本数据_正则表达式

本文将介绍如何在Java中使用正则表达式来处理文本数据.正则表达式就是一个字符串,但和普通的字符串不同的是,正则表达式是对一组相似字符串的抽象,如下面的几个字符串: a98b   c0912d   c10b   a12345678d   ab 我们仔细分析上面五个字符串,可以看出它们有一个共同特征,就是第一个字符必须是'a'或'c',最后一个字符必须是'b'或'd',而中间的字符是任意多个数字组成(包括0个数字).因此,我们可以将这五个字符串的共同特点抽象出来,这就产生了一个正则表达式:[ac]

asp.net使用母版页中使用ajax脚本取数据

方法如下: 1. 页面中拖入ScriptManager.以便于使用Ajax脚本.同时放在其它客户端控件,用于触发NetPost方法.这里不列出客户端控件. 复制代码 代码如下: <asp:ScriptManager ID="smMaster" runat="server" ScriptMode="Auto" EnablePageMethods="true"> </asp:ScriptManager> 2

asp.net使用母版页中使用ajax脚本取数据_实用技巧

方法如下: 1. 页面中拖入ScriptManager.以便于使用Ajax脚本.同时放在其它客户端控件,用于触发NetPost方法.这里不列出客户端控件. 复制代码 代码如下: <asp:ScriptManager ID="smMaster" runat="server" ScriptMode="Auto" EnablePageMethods="true"> </asp:ScriptManager> 2