<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      無組件上傳及注釋

      [摘要]先看看這個,以上傳一個文件名為1111.txt里面內容為1111111111111111的文本文件為例。以下是表單提交到服務器的數據,文件存儲就是找到文件域中的數據存放為文件即可。---------...

      先看看這個,以上傳一個文件名為1111.txt里面內容為1111111111111111的文本文件為例。
      以下是表單提交到服務器的數據,文件存儲就是找到文件域中的數據存放為文件即可。


      -----------------------------7d36022d06d8
      Content-Disposition: form-data; name="file1"; filename="E:\1111.txt"
      Content-Type: text/plain

      1111111111111111
      -----------------------------7d36022d06d8
      Content-Disposition: form-data; name="Submit"

      提交
      -----------------------------7d36022d06d8--

      ************************************************


      <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

      dim upfile_Stream

      Class upload_5xSoft

      dim Form,File,Version

      Private Sub Class_Initialize 
      dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFile
      dim strDiv,mFormName,mFormvalue,mFileName,mFileSize,mFilePath,iDivLen,mStr
      Version="LYL上傳系統,5xSoft主編,純生注釋。"
      if Request.TotalBytes<1 then Exit Sub ''TotalBytes,返回瀏覽器發送的字節數

      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ''創建兩個集合,Form用于存放非文本域數據,File用于存放文本域數據。
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
      set Form=CreateObject("Scripting.Dictionary")
      set File=CreateObject("Scripting.Dictionary")

      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ''創建一個二進制的數據數,用于存放表單提交上來的所有數據
      ''BinaryRead是返回一個POST請求發送到服務器的二進制信息
      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      set upfile_Stream=CreateObject("Adodb.Stream")
      upfile_Stream.mode=3
      upfile_Stream.type=1
      upfile_Stream.open
      upfile_Stream.write Request.BinaryRead(Request.TotalBytes)


      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ''下面就是戲肉了!
      ''下面有兩個自己定義函數,首先解釋一下先。
      ''inString,返回形參第二個參數在數據流里的位置。兩個形參:1.起始位置;2.字符串。
      ''subString,返回兩個位置間的字符串。兩個形參:1.起始位置;2.結束位置。
      ''
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      vbEnter=Chr(13)&Chr(10) ''Chr(13)是回車,Chr(10)是換行(這句也注,高手們又要罵街了。
      iDivLen=inString(1,vbEnter)+1 ''找到第一個表單間隔符的結束位置
      strDiv=subString(1,iDivLen) ''找到表單里的間隔符,賦給strDiv
      iFormStart=iDivLen ''表單中第一個元素的開始位置
      iFormEnd=inString(iformStart,strDiv)-1 ''表單第一個元素的結束位置


      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      while iFormStart < iFormEnd ''這句不用注釋了吧。??
      iStart=inString(iFormStart,"name=""") ''找到元素名的開始位置
      iEnd=inString(iStart+6,"""") ''找到元素名結束的位置
      mFormName=subString(iStart+6,iEnd-iStart-6) ''找到元素名
      iFileNameStart=inString(iEnd+1,"filename=""") ''找文件域中文件名


      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ''如果找到有文件名,即是此元素是一個文件域,否則是其它的元素
      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
      if iFileNameStart>0 and iFileNameStart<iFormEnd then
      iFileNameEnd=inString(iFileNameStart+10,"""") ''找到文件名的結束位置
      mFileName=subString(iFileNameStart+10,iFileNameEnd-iFileNameStart-10)''找到文件名
      iStart=inString(iFileNameEnd+1,vbEnter&vbEnter) ''找到該文件的開始位置
      iEnd=inString(iStart+4,vbEnter&strDiv) ''找到該文件的結束位置

      ''''''''''''''''''''
      ''得到文件的大小
      '''''''''''''''''''''
      if iEnd>iStart then
      mFileSize=iEnd-iStart-4
      else
      mFileSize=0
      end if

      '''''''''''''''''''''''''''''''''
      ''FileInfo是自定義類,用于存放文件信息和將文件數據保存為文件 
      '''''''''''''''''''''''''''''''''
      set theFile=new FileInfo
      theFile.FileName=getFileName(mFileName)
      theFile.FilePath=getFilePath(mFileName)
      theFile.FileSize=mFileSize
      theFile.FileStart=iStart+4
      theFile.FormName=FormName
      file.add mFormName,theFile

      ''''''''''''''''''''''''''''''''''''''''''
      ''下面是處理非文件域元素
      ''
      ''''''''''''''''''''''''''''''''''''''''''
      else
      iStart=inString(iEnd+1,vbEnter&vbEnter)
      iEnd=inString(iStart+4,vbEnter&strDiv)

      if iEnd>iStart then
      mFormvalue=subString(iStart+4,iEnd-iStart-4)
      else
      mFormvalue="" 
      end if
      form.Add mFormName,mFormvalue
      end if

      iFormStart=iformEnd+iDivLen ''將iFormStart指向下一個元素的開始
      iFormEnd=inString(iformStart,strDiv)-1 ''將iFormEnd指向下一個元素的結束
      wend
      End Sub



      ''''''''''''''''''''''''''''''''''''''
      ''以下是兩個自定義函數和一些獲取文件信息的過程,基于算法不算復雜,請自行分析。
      ''注:upfile_Stream.Position 設置數據流的位置;
      '' upfile_Stream.Read(1) 從數據流中讀取一個字節,(是ASCII碼) 
      ''''''''''''''''''''''''''''''''''''''
      Private Function subString(theStart,theLen)
      dim i,c,stemp
      upfile_Stream.Position=theStart-1
      stemp=""
      for i=1 to theLen
      if upfile_Stream.EOS then Exit for
      c=ascB(upfile_Stream.Read(1))
      If c > 127 Then
      if upfile_Stream.EOS then Exit for
      stemp=stemp&Chr(AscW(ChrB(AscB(upfile_Stream.Read(1)))&ChrB(c)))
      i=i+1
      else
      stemp=stemp&Chr(c)
      End If
      Next
      subString=stemp
      End function
      ''''''''''''''''''''''''''''''''''''''
      ''自定義函數toByte,返回一個字符串
      ''
      ''
      ''''''''''''''''''''''''''''''''''''''
      Private Function inString(theStart,varStr)
      dim i,j,bt,theLen,str
      InString=0
      Str=toByte(varStr)
      theLen=LenB(Str)
      for i=theStart to upfile_Stream.Size-theLen
      if i>upfile_Stream.size then exit Function
      upfile_Stream.Position=i-1
      if AscB(upfile_Stream.Read(1))=AscB(midB(Str,1)) then
      InString=i
      for j=2 to theLen
      if upfile_Stream.EOS then 
      inString=0
      Exit for
      end if
      if AscB(upfile_Stream.Read(1))<>AscB(MidB(Str,j,1)) then
      InString=0
      Exit For
      end if
      next
      if InString<>0 then Exit Function
      end if
      next
      End Function

      Private Sub Class_Terminate 
      form.RemoveAll
      file.RemoveAll
      set form=nothing
      set file=nothing
      upfile_Stream.close
      set upfile_Stream=nothing
      End Sub


      Private function GetFilePath(FullPath)
      If FullPath <> "" Then
      GetFilePath = left(FullPath,InStrRev(FullPath, "\"))
      Else
      GetFilePath = ""
      End If
      End function

      Private function GetFileName(FullPath)
      If FullPath <> "" Then
      GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
      Else
      GetFileName = ""
      End If
      End function
      ''''''''''''''''''''''''''''''''''''''
      ''Hex 返回表示十六進制數字值的字符串
      ''
      ''
      ''''''''''''''''''''''''''''''''''''''
      Private function toByte(Str)
      dim i,iCode,c,iLow,iHigh
      toByte=""
      For i=1 To Len(Str)
      c=mid(Str,i,1)
      iCode =Asc(c)
      If iCode<0 Then iCode = iCode + 65535
      If iCode>255 Then
      iLow = Left(Hex(Asc(c)),2)
      iHigh =Right(Hex(Asc(c)),2)
      toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh)
      Else
      toByte = toByte & chrB(AscB(c))
      End If
      Next
      End function
      End Class


      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ''定義FileInfo類
      ''
      ''
      ''
      ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

      Class FileInfo
      dim FormName,FileName,FilePath,FileSize,FileStart
      Private Sub Class_Initialize 
      FileName = ""
      FilePath = ""
      FileSize = 0
      FileStart= 0
      FormName = ""
      End Sub

      ''''''''''''''''''''''''''''''''''''''
      ''存放文件
      ''
      ''
      '''''''''''''''''''''''''''''''''''''' 
      Public function SaveAs(FullPath)
      dim dr,ErrorChar,i
      SaveAs=1
      if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit function
      if FileStart=0 or right(fullpath,1)="/" then exit function
      set dr=CreateObject("Adodb.Stream")
      dr.Mode=3
      dr.Type=1
      dr.Open
      upfile_Stream.position=FileStart-1
      upfile_Stream.copyto dr,FileSize
      dr.SaveToFile FullPath,2
      dr.Close
      set dr=nothing 
      SaveAs=0
      end function
      End Class
      </SCRIPT>


      下面是調用方法
      <!--#include FILE="upload.inc"-->
      <!--#include FILE="setup.asp"-->
      <%
      dim upload,file,formName,iCount
      set upload=new upload_wilton ''建立上傳對象

      ''在目錄后加(/)
      if right(formPath,1)<>"/" then formPath=formPath&"/" 

      iCount=0

      for each formName in upload.file ''列出所有上傳了的文件
      set file=upload.file(formName) ''生成一個文件對象


      file.SaveAs Server.mappath(formPath&file.FileName) ''保存文件

      response.write file.FilePath&file.FileName
      response.Write("<br>")
      response.write file.FileSize

      set file=nothing
      next
      set upload=nothing ''刪除此對象
      %>

      還有一個setup.asp是設置一些限制文件的參數

      <%
      dim formPath,uploadsize,FileType,maxpage
      uploadsize= "64" ''設置文件大小,單位是 K

      maxpage= "10" ''上傳文件列表每頁顯示的個數

      formPath= "pic/" ''設置保存目錄,以程序所在目錄為相對目錄,可自己修改或創建。

      FileType= ".gif.jpg" ''設置限制上傳文件類型,只支持三個字母的擴展名。


      日韩精品一区二区三区高清