ÔÚ½âÂëËÙ¶È·½Ã棬»¯¾³ 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