亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

時間、空間性能極優的asp無組件上傳類

2019-11-18 19:21:43
字體:
來源:轉載
供稿:網友

在解碼速度方面,化境 2.0 已經非常高了,但是,它還存在以下兩個問題:
1、用Data_5xsoft.Write  Request.BinaryRead(Request.TotalBytes)一次讀取全部數據,以及用RequestData =Data_5xsoft.Read 一次取出全部數據,在上傳數據過大時,會由于內存不足,導致上傳失敗,這里應該采用分段讀取方式。
2、保存數據時,需要先從Data_5xsoft中復制到一個臨時流中,在保存大文件時,需要兩倍的存儲資源,在單機狀態下測試,可以發現保存時間隨文件尺寸急劇增長,甚至超過上傳和解碼時間。

本人所寫的這個類,采用在解碼的過程中,逐塊讀取(注意:塊的大小與速度不成正比,單機測試表明,64K的塊比1M的塊快得多)的方法,解決問題1,同時采用對普通數據,寫入工作流;對文件內容,直接寫入文件自身的流的方式,解決問題2。

代碼如下,用法類似于化境:

Server.ScriptTimeOut = 600

Class QuickUpload
 PRivate FForm, FFile, Upload_Stream, ConvertStream
 
 property get Form
  set Form = FForm
 end property
 
 property get File
  set File = FFile
 end property
 
 Private Sub Class_Initialize
  dim iStart, iEnd, boundary, FieldName, FileName, ContentType, ItemValue, theFile, LineEnd
 
  set FForm=CreateObject("Scripting.Dictionary")
  set FFile=CreateObject("Scripting.Dictionary")
  set Upload_Stream=CreateObject("Adodb.Stream")
  Upload_Stream.mode=3
  Upload_Stream.type=1
  Upload_Stream.open
  set ConvertStream = Server.CreateObject("adodb.stream")
  ConvertStream.Mode =3
  ConvertStream.Charset="GB2312"
 
  if Request.TotalBytes<1 then Exit Sub
   
  'dStart = CDbl(Time)
 
  '查找第一個邊界
  iStart = Search(Upload_Stream, ChrB(13)&ChrB(10), 1)
  '取邊界串
  boundary = subString(1, iStart-1, false)
  '不是結束邊界,則循環
  do while StrComp(subString(iStart, 2, false),ChrB(13)&ChrB(10))=0
   iStart = iStart+2
   '取表單項信息頭
   do while true
    iEnd = Search(Upload_Stream, ChrB(13)&ChrB(10), iStart)
    '分解信息頭
    line = subString(iStart, iEnd-iStart, true)
    '移動位置
    iStart = iEnd+2
    if Line="" then Exit do
    pos = instr(line,":")
    if pos>0 then
     if StrComp(left(Line,pos-1),"Content-Disposition",1)=0 then
      '取表單項名稱
      FieldName = ExtractValue(Line,pos+1,"name")
      '取文件名稱
      FileName = ExtractValue(Line,pos+1,"filename")
      '刪除文件路徑
      FileName = Mid(FileName,InStrRev(FileName, "/")+1)
     elseif StrComp(left(Line,pos-1),"Content-Type",1)=0 then
      '取文件類型
      ContentType = trim(mid(Line,pos+1))
     end if
    end if
   loop
   '取表單項內容
   if FileName<>"" then
    '新建文件內容
    set theFile = new FileInfo
    theFile.Init FileName, ContentType
    '文件流內容移到文件流中
    MoveData Upload_Stream, theFile.Stream, iStart
    '上傳數據直接傳入文件流,可以減少文件存儲時間
    iEnd = Search(theFile.Stream, boundary, 1)
    '后繼數據移入工作流
    MoveData theFile.Stream, Upload_Stream, iEnd-2
    '
    FFile.add FieldName, theFile
    '移動位置
    iStart = iStart+2+LenB(boundary)
   else
    '查找邊界
    iEnd = Search(Upload_Stream, boundary, iStart)
    '取表單項內容
    ItemValue = subString(iStart, iEnd-2-iStart, true)
    '
    if FForm.Exists(FieldName) then
     FForm.Item(FieldName) = FForm.Item(FieldName) & "," & ItemValue
    else
     FForm.Add FieldName, ItemValue
    end if
    '移動位置
    iStart = iEnd+LenB(boundary)
   end if
  loop
  'Response.Write "parse time:" & FormatNumber((CDbl(Time)-dStart)*24*60*60,-1,-1) & "<br>"
 End Sub

 Private Function Search(src, str, theStart)
  iStart = theStart
  pos=0
  do while pos=0
   '長度不夠,讀一塊
   if src.Size<(iStart+lenb(str)-1) then ReadChunk src
   '取一段數據,約64K,可以減少內存需求
   src.Position = iStart-1
   buf = src.Read
   '檢測邊界
   pos=InStrB(buf,str)
   '如果未找到,向后移動
   if pos=0 then iStart = iStart+LenB(buf)-LenB(str)+1
  loop
  Search = iStart+pos-1
 End function
 
 private sub MoveData(Src, Dest, theStart)
  Src.Position = theStart-1
  Dest.Position = Dest.Size
  Src.CopyTo dest
  Src.Position = theStart-1
  Src.SetEOS
 end sub
 
 private function ExtractValue(line,pos,name)
  dim t, p
  ExtractValue = ""
  t = name + "="""
  p = instr(pos,line,t)
  if p>0 then
   n1 = p+len(t)
   n2 = instr(n1,line,"""")
   if n2>n1 then ExtractValue = mid(line,n1,n2-n1)
  end if
 end function

 Private Function subString(theStart,theLen, ConvertToUnicode)
  if theLen>0 then
   '當長度不夠時,讀一塊數據
   if Upload_Stream.Size<theStart+theLen-1 then ReadChunk Upload_Stream
   Upload_Stream.Position=theStart-1
   Binary =Upload_Stream.Read(theLen)
   if ConvertToUnicode then
    ConvertStream.Type = 1
    ConvertStream.Open
    ConvertStream.Write Binary
    ConvertStream.Position = 0
    ConvertStream.Type = 2
    subString = ConvertStream.ReadText
    ConvertStream.Close
   else
    subString = midB(Binary,1)
   end if
  else
   subString = ""
  end if
 End function
 
 Private Sub ReadChunk(src)
  '讀一塊,通過一次讀64K,可以防止數據量過大時內存溢出
  if Response.IsClientConnected = false then Raise "網絡連接中斷"
  BytesRead = 65536
  src.Position = src.Size
  src.Write Request.BinaryRead(BytesRead)
  End Sub
 
 '異常信息
 Private Sub Raise(Message)
 Err.Raise vbObjectError, "QuickUpload", Message
 End Sub

 Private Sub Class_Terminate 
    form.RemoveAll
    file.RemoveAll
    set form=nothing
    set file=nothing
    Upload_Stream.close
    set Upload_Stream=nothing
  ConvertStream.Close
  set ConvertStream=nothing
 
 End Sub

End Class

Class FileInfo
   Private FFileName, FFileType, FFileStart, FFileSize, FStream
 
 property get FileName
  FileName = FFileName
 end property
 
 property get FileType
  FileType = FFileType
 end property
 
 property get FileSize
  FileSize = FStream.Size
 end property
 
 property get Stream
  set Stream = FStream
 end property
 
   Public Sub Init(AFileName, AFileType)
     FFileName = AFileName
  FFileType = AFileType
   End Sub
 
 Public function SaveAs(FullPath)
     dim dr,ErrorChar,i
  'dStart = CDbl(Time)
     SaveAs=1
     if trim(fullpath)="" or right(fullpath,1)="/" then exit function
     On Error Resume Next
     FStream.SaveToFile FullPath,2
  if Err.Number>0 then Response.Write "保存數據出錯:" & Err.Description & "<br>"
     SaveAs=0
  'Response.Write "save time:" & FormatNumber((CDbl(Time)-dStart)*24*60*60,-1,-1) & "<br>"
   end function
  
 Private Sub Class_Initialize
  set FStream=CreateObject("Adodb.Stream")
  FStream.mode=3
  FStream.type=1
  FStream.open
 end sub
 
 Private Sub Class_Terminate 
     FStream.Close
     set FStream=nothing
 end sub
End Class


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清第一页| 国产视频欧美视频| 51色欧美片视频在线观看| 国产成人一区二区三区电影| 欧美—级a级欧美特级ar全黄| 久久精品国产欧美亚洲人人爽| 国产91ⅴ在线精品免费观看| 综合欧美国产视频二区| 久色乳综合思思在线视频| 久久人人爽人人爽人人片亚洲| 欧美做受高潮1| 海角国产乱辈乱精品视频| 欧美性高潮在线| 欧美丝袜美女中出在线| 亚洲精品国产精品国产自| 国产精品亚洲综合天堂夜夜| 亚洲第一av网| 亚洲男人天天操| 欧美日韩午夜剧场| 精品视频一区在线视频| 免费91在线视频| 久久精品国产69国产精品亚洲| 久久成人这里只有精品| 91在线观看免费观看| 欧美大片免费观看在线观看网站推荐| 91国内产香蕉| 国产欧美一区二区白浆黑人| 日韩欧美成人网| 亚洲精品动漫100p| 亚洲成人精品视频在线观看| 亚洲区一区二区| 992tv在线成人免费观看| 亚洲国产精品yw在线观看| 成人免费视频网址| 日韩在线欧美在线国产在线| 日韩国产欧美精品在线| 欧美成人黄色小视频| 国产一区视频在线播放| 国产在线播放91| 57pao国产成人免费| 国内外成人免费激情在线视频| 亚洲直播在线一区| 亚洲欧美在线磁力| 日韩成人av网址| 国外成人在线播放| 最新69国产成人精品视频免费| 成人网址在线观看| 91久久国产综合久久91精品网站| 国产91|九色| 国产精品美女av| 久久精品99久久香蕉国产色戒| 国产亚洲一区二区在线| 中文字幕亚洲色图| 亚洲最大av网站| 久久成人人人人精品欧| 欧美美最猛性xxxxxx| 精品久久久久久久久久久| 欧美xxxx做受欧美.88| 亚洲va国产va天堂va久久| 欧美日韩免费一区| 国产日产亚洲精品| 福利一区福利二区微拍刺激| 91亚洲精华国产精华| 亚洲第一中文字幕在线观看| 日韩av在线电影网| 在线不卡国产精品| 欧美精品国产精品日韩精品| 欧美精品一区二区免费| 久久最新资源网| 久久网福利资源网站| zzijzzij亚洲日本成熟少妇| 欧美日韩亚洲系列| 国产精品自产拍在线观| 久久久免费观看| 亚洲精品在线不卡| 亚洲人成网站在线播| 色妞久久福利网| 亚洲男女自偷自拍图片另类| 久久久久久久影视| 亚洲一区二区三区成人在线视频精品| 久久久天堂国产精品女人| 欧美限制级电影在线观看| 免费av一区二区| 成人淫片在线看| 亚洲精品视频在线观看视频| 欧美日韩国产一中文字不卡| 91国产美女视频| 欧美国产日韩二区| 精品美女久久久久久免费| 国产精品美女主播在线观看纯欲| 色偷偷偷综合中文字幕;dd| 国产精品一区二区电影| 精品视频久久久久久久| 成人免费看片视频| 日韩视频精品在线| 一区二区福利视频| 日韩激情在线视频| 国产91精品久| 久国内精品在线| 91精品国产综合久久久久久久久| 欧美午夜视频在线观看| 久久久www成人免费精品| 亚洲免费视频观看| 国产成人在线亚洲欧美| 国产精品视频xxxx| 欧美激情精品在线| 欧美放荡办公室videos4k| 亚洲free嫩bbb| 国产精品入口免费视频一| 国产在线久久久| 成人午夜在线视频一区| 成人欧美一区二区三区在线湿哒哒| 亚洲国产婷婷香蕉久久久久久| 国产精品视频内| 久久天天躁日日躁| 久久久中精品2020中文| 国产精品第七影院| 久久久91精品国产一区不卡| 久久精品国产清自在天天线| 久久影院在线观看| 亚洲午夜av久久乱码| 国产精品久久久久久久7电影| 亚洲伊人久久综合| 国产中文字幕亚洲| 九九久久综合网站| 精品国产一区二区三区久久狼黑人| 久久夜色精品亚洲噜噜国产mv| 日韩精品黄色网| 久久亚洲精品国产亚洲老地址| 欧美裸体视频网站| 91精品视频免费看| 中文字幕精品国产| 在线观看视频99| 欧美精品电影免费在线观看| 精品福利一区二区| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲男人天堂2024| 精品丝袜一区二区三区| 欧美另类在线播放| 这里只有精品在线观看| 久久精品国产久精国产思思| 日韩精品视频观看| 日韩中文字幕精品| 久久久久久久电影一区| 亚洲理论电影网| 亚洲欧洲日产国产网站| 欧美午夜激情在线| 成人xxxx视频| 日韩经典一区二区三区| 国产日韩欧美夫妻视频在线观看| 欧美大片va欧美在线播放| 国产精品视频区| 国产精品久久久久久久久久免费| 国产午夜一区二区| 九九热r在线视频精品| 久久精品99久久久香蕉| 午夜精品一区二区三区视频免费看| 97精品视频在线播放| 91精品国产自产在线观看永久| 91国内产香蕉| 91成人在线视频| 国产免费一区二区三区在线观看| 96精品久久久久中文字幕| 亚洲精品98久久久久久中文字幕|