蛙蛙推荐:蛙蛙牌无组件上传类

上传|无组件|上传|无组件

<%
'当表单里既有文本域又有文件域的时候,我们必须把表单的编码类型设置成"multipart/form-data"类型
'这时候上传上来的编码文件并不能直接取出文本域的值和文件域的二进制数据,这就需要拆分表单域
'在上传上来的数据流中在每个表单域间都有一个随机的分隔符,这个分隔符是在同一个流中不变的,不同的流分隔符不变,
'这个分隔符在流的最开头,并且以一个chrb(13) + chrb(10)结束,知道这个后我们就可以用这个分隔符来遍历拆分表单域了.
'对于文件域,我们要解析字段名,文件名,文件类型和文件内容,域名是以"name="为前导,并包含在一对双引号中,文件名的值是以"filename="为前导,也包含在双引号里,其中包含文件的全路径和文件名,紧跟着后面又是一对回车换行府(chrb(13) +chrb(10)),字符串"content-type:"和两对回车换行之间的内容为文件类型字符串,两对回车换行后到一对回车换行之间的数据为文件内容
'对于文本域,我们只要解析他的值就可以了,域的名称是以"name="之后,用双引号包着,两对回车换行后到以一对回车换行开始的域分隔符之间为该文本域的值
'当然上传上来的流是二进制格式,在操作的时候需要用一些操作二进制的函数,而不是平时用的操作字符串的函数,比如说leftB,midB,instrB等,下面就是算法的实现
Class GetPost
 private BdataStr,SeparationStr,wawa_stream '提交的信息,表单域间分隔字符
 '类初始化
 Private Sub Class_Initialize
  set wawa_stream=CreateObject("Adodb.Stream") '创建全局流
  wawa_stream.mode=3 '读写模式
  wawa_stream.type=1 '二进制读取模式 
  wawa_stream.open '打开流
  BdataStr=Request.BinaryRead(Request.TotalBytes)'获取上传的所有数据
  wawa_stream.write BdataStr '读取数据   
  SeparationStr=LeftB(BdataStr,Clng(inStrb(BdataStr,ChrB(13) + ChrB(10)))-1) '分隔字符串
 End Sub
 '类的析构函数,卸载全局流对象
 Private Sub Class_Terminate         
  wawa_stream.close
     set wawa_5xSoft_Stream=nothing
 End Sub
 '返回file型表单域的值(二进制)
 Public Function GetFile (FieldName)
  Dim L1,DataStart,DataLng
  L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) +FieldName +Chr(34)))
  DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) +4
  DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart -2
  GetFile =MidB(BdataStr,DataStart,DataLng)
 End Function
 '返回文件的类型
 Public Function GetFileType (FieldName)
  Dim L1,DataStart,DataLng
  L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) +FieldName +Chr(34)))
  DataStart = InStrB(L1,BdataStr,GetBinary("Content-Type:")) + 13
  DataLng = InStrB(DataStart,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) - DataStart
  GetFileType =GetText(MidB(BdataStr,DataStart,DataLng))
 End Function
 '返回文件的原始路径
 Public Function GetFilePath (FieldName)
  Dim L1,DataStart,DataLng
  L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) +FieldName +Chr(34)))
  DataStart = InStrB(L1,BdataStr,GetBinary("filename=")) + 9
  DataLng = InStrB(DataStart,BdataStr,ChrB(13) + ChrB(10)) - DataStart
  GetFilePath = GetText(MidB(BdataStr,DataStart+1,DataLng-2)) '去掉最左边和最右边的双引号,不知道为什么右边的双引号要减去2
 End Function
 '返回原始文件的后缀名
 Function GetExtendName(FieldName)
  FileName = GetFilePath(FieldName)
  If isNull(FileName) or FileName="" Then
   GetExtendName=""
   Exit Function
  End If
  GetExtendName = Mid(FileName,InStrRev(FileName, "."))
 End Function
 '返回file型表单域的值(二进制)
 Public Function GetFileSize (FieldName)
  Dim L1,DataStart,DataLng
  L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) +FieldName +Chr(34)))
  DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) +4
  DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart -2
  GetFileSize = DataLng
 End Function
 '从二进制字符串里取出表单域的值(字符串)
 Public Function RetFieldText (FieldName)
  Dim L1,DataStart,DataLng
  L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) +FieldName +Chr(34)))
  DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) +4
  DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart -2
  RetFieldText =GetText(MidB(BdataStr,DataStart,DataLng))
 End Function
 '返回一个时间和随机数连接后的字符串,用于构建文件名
 Function getrandStr()
  Dim RanNum
  Randomize
  RanNum = Int(90000*rnd)+10000
  getrandStr = Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&RanNum
 End Function

 '将二进制外码系列转换成vb字符串
 Private Function GetText (Str1r)
  Dim s,t,t1,i
  s = "":t="":t1=""
  For i =1 To LenB(str1r)
   t= AscB(MidB(Str1r,i,1)) '按字节取出外码
   if not(t > 127) Then '字节高位为0,表示英文字符
    s = s + Chr(t)
   Else
    i =

时间: 2024-08-03 14:56:49

蛙蛙推荐:蛙蛙牌无组件上传类的相关文章

ASP实例:一个简单的ASP无组件上传类

简单的ASP无组件上传类,发出来让大家看看.可以做做实验! 以下为引用的内容: <%@ language="javascript"%><%var self = Request.serverVariables("SCRIPT_NAME");if (Request.serverVariables("REQUEST_METHOD")=="POST"){        var oo = new uploadFile(

ASP无组件上传类的应用实例

上传|无组件|应用实例|上传|无组件|应用实例 ''''''-------- upload.htm ------------- <script language="javascript">   function checkFile(myForm)    { if(myForm.File1.value=='') return false;    myForm.submit();     }</script><form method="POST&qu

化境ASP无组件上传类 - upload

上传|无组件 化境ASP无组件上传类 - upload_5xsoft 使用手册 1.0 稻香老农 http://www.5xsoft.com/ [ 下载 ] 目 录 1.关于 upload_5xsoft 2.运行平台与注意事项 2.类的成员与对象 3.使用示例 关于 upload_5xsoft 一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,大多解决法就是安装 第三方上传组件.可第三方组件有很多问题,有的组件要注册,有的组件要在表单中加上他的版权信息. 还

求asp.net的无组件上传类

问题描述 得到上传路径不用组件直接上传.谢谢! 解决方案 解决方案二:顶~!求asp.net1.0的无组件上传类解决方案三:怎么都没人理我5555555555555~~!解决方案四:晕..asp.net本身就可以直接上传啊..解决方案五:求求各位啦!谁有就给我一个吧解决方案六:这个没弄过!不知深浅!

时间、空间性能极优的asp无组件上传类

上传|无组件|性能|上传|无组件|性能 在解码速度方面,化境 2.0 已经非常高了,但是,它还存在以下两个问题: 1.用Data_5xsoft.Write  Request.BinaryRead(Request.TotalBytes)一次读取全部数据,以及用RequestData =Data_5xsoft.Read 一次取出全部数据,在上传数据过大时,会由于内存不足,导致上传失败,这里应该采用分段读取方式. 2.保存数据时,需要先从Data_5xsoft中复制到一个临时流中,在保存大文件时,需要

无组件上传类

上传|无组件 <%'当表单里既有文本域又有文件域的时候,我们必须把表单的编码类型设置成"multipart/form-data"类型'这时候上传上来的编码文件并不能直接取出文本域的值和文件域的二进制数据,这就需要拆分表单域'在上传上来的数据流中在每个表单域间都有一个随机的分隔符,这个分隔符是在同一个流中不变的,不同的流分隔符不变,'这个分隔符在流的最开头,并且以一个chrb(13) + chrb(10)结束,知道这个后我们就可以用这个分隔符来遍历拆分表单域了.'对于文件域,我们要

无组件上传类的源代码

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>'定义全局变量保存用户上传的内容'dim strmUpload'自定义class处理上传文件'Class FileUpload dim Form,File Private Sub Class_Initialize dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFile dim strDiv,mFormName,mF

6行代码实现无组件上传

上传|无组件 目前有很多无组件上传类,我大概看了一下,大多写的相当复杂,有的居然还只能传文本最关键的是没有10行代码以下的 :)我花了一个晚上时间研究了一下ADODB.Stream,并且用了6行代码实现了无组件上传: strFileName = Request.QueryString("file1")Set objStream = Server.CreateObject("ADODB.Stream")objStream.Type = 1 ' adTypeBinary

ASP实例:6行代码实现无组件上传

 目前有很多无组件上传类,我大概看了一下,大多写的相当复杂,有的居然还只能传文本  最关键的是没有10行代码以下的 :)  我花了一个晚上时间研究了一下ADODB.Stream,并且用了6行代码实现了无组件上传:  strFileName = Request.QueryString("file1")  Set objStream = Server.CreateObject("ADODB.Stream")  objStream.Type = 1 ' adTypeBin