蛙蛙推薦:蛙蛙牌無組件上傳類

來源:互聯網
上載者:User
上傳|無組件|上傳|無組件
<%
'當表單裡既有文本域又有檔案域的時候,我們必須把表單的編碼類別型設定成"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 =



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。