变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

當(dāng)前位置:首頁文章首頁 IT學(xué)院 IT技術(shù)

關(guān)于ASP組件上傳的三種機(jī)制

作者:  來源:  發(fā)布時(shí)間:2011-6-25 11:15:59  點(diǎn)擊:

下面提供給大家一起分享學(xué)習(xí)的是關(guān)于ASP組件上傳的原理分析和三種機(jī)制說明,希望能夠幫助到大家。

ASP 組件 FILE對象

  當(dāng)前,基于瀏覽器/服務(wù)器模式的應(yīng)用比較流行。當(dāng)用戶需要將文件傳輸?shù)椒⻊?wù)器上時(shí),常用方法之一是運(yùn)行FTP服務(wù)器并將每個(gè)用戶的FTP默認(rèn)目錄設(shè)為用戶的Web主目錄,這樣用戶就能運(yùn)行FTP客戶程序并上傳文件到指定的 Web目錄。這就要求用戶必須懂得如何使用FTP客戶程序。因此,這種解決方案僅對熟悉FTP且富有經(jīng)驗(yàn)的用戶來說是可行的。 如果我們能把文件上傳功能與Web集成,使用戶僅用Web瀏覽器就能完成上傳任務(wù),這對于他們來說將是非常方便的。但是,一直以來,由于File System Object的僅能傳送文本文件的局限,所以ASP最大的難題就是文件上傳問題。下面介紹的就是如何在基于HTTP協(xié)議的網(wǎng)頁中實(shí)現(xiàn)文件的上傳。 
  
  一.通過HTTP上傳的三種機(jī)制 
  
  通過HTTP上傳有三種機(jī)制:RFC1867, PUT 和 WebDAV。 
  
  PUT 是在HTTP 1.1引入了一個(gè)新的HTTP動詞。當(dāng)web服務(wù)器收到一個(gè)HTTP PUT和對象名字,它將會驗(yàn)證用戶,接收HTTP流的內(nèi)容,并把它直接存入web服務(wù)器。由于這可能會對一個(gè)web站點(diǎn)造成破壞,并且還會失去HTTP最大的優(yōu)勢:服務(wù)器可編程性。在PUT的情況下,服務(wù)器自己處理請求:沒有空間讓CGI或者ASP應(yīng)用程序介入。唯一讓你的應(yīng)用程序捕獲PUT的方法是在低層操作,ISAPI過濾層。由于相應(yīng)的原因,PUT的應(yīng)用很有限。 
  
  而WebDAV允許web內(nèi)容的分布式認(rèn)證與翻譯。它引入了幾種新的HTTP動詞,允許通過HTTP上傳,鎖定/解鎖,登記/檢驗(yàn)web內(nèi)容。Office 2000中的"Save to web" 就是通過WebDAV來實(shí)現(xiàn)的。如果你所感興趣的一切都是上傳內(nèi)容,WebDAV應(yīng)用得非常出色,它解決了很多問題。 然而,如果你需要在你的web應(yīng)用程序里面上傳文件,WebDAV對你就毫無用處可言。象HTTP PUT一樣,那些WebDAV的動詞是被服務(wù)器解釋的,而不是web應(yīng)用程序。你需要工作在ISAPI過濾層來訪問WebDAV的這些動詞,并在你的應(yīng)用程序中解釋內(nèi)容。 
  
  RFC1867 最終被W3C在HTML3.2中接受前,是作為一種建議標(biāo)準(zhǔn)。它是一種非常簡單但是功能很強(qiáng)大的想法:在表單字段中定義一個(gè)新類型。

  <INPUT TYPE="FILE">

  并且在表單本身加入了不同的編碼方案,不再使用典型的:

 <FORM ACTION="formproc.asp" METHOD="POST">

  而是使用:

  <FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data">

  這種編碼方案在傳送大量數(shù)據(jù)的時(shí)候,比起缺省的"application/x-url-encoded"表單編碼方案,顯得效率要高得多。URL編碼只有很有限的字符集,使用任何超出字符集的字符,必須用'%nn'代替,這里的nn表示相應(yīng)的2個(gè)十六進(jìn)制數(shù)字。例如,即使是普通的空格字符也要用'%20'代替。而RFC1867使用多部分MIME編碼,就象通常在e-mail消息中看到的那樣,不編碼來傳送大量數(shù)據(jù),而只是在數(shù)據(jù)周圍加上很少的簡單但實(shí)用的頭部。主要瀏覽器的廠商都采用了建議的"瀏覽..."按鈕,用戶能很容易的使用本地"打開文件..." 對話框選擇要上傳的文件。 
  
  RFC1867仍然將大多數(shù)文件上傳的靈活方法留給了你的web應(yīng)用程序。PUT用得很有限。WebDAV對內(nèi)容的作者很有用,比如FrontPage用戶,但是對想在web應(yīng)用程序中加入文件上傳的web開發(fā)者來說很少用到。因此,RFC1867是在web應(yīng)用程序中加入文件上傳的最好的辦法。 
  
  在實(shí)際應(yīng)用中,微軟免費(fèi)提供了Posting Acceptor 。ASP不懂"multipart/form-data" 編碼方案。取而代之,微軟提供了Posting Acceptor ,Posting Acceptor是一種在上傳完成后,接受REPOST到一個(gè)ASP頁的ISAPI應(yīng)用程序。 
  
  Software Artisans的SA-FileUp是最早的商業(yè)Active Server組件之一。幾經(jīng)改進(jìn),現(xiàn)在作為一個(gè)純粹的ASP組件存在。

    二.基于ASP的文件上傳實(shí)現(xiàn)原理分析 
  
  基本原理是:采用ADO Stream對象的BinaryRead方法將FORM中的所有數(shù)據(jù)讀出,從中截取出所需的文件數(shù)據(jù),以二進(jìn)制文件方式存盤。 
  
  下面是上傳文件頁面的一個(gè)例子(upload.htm):

  <html>
  <body>
  <form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
  <input type="file" name="FileName">
  <INPUT TYPE="Submit" VALUE="Upload"></TD>
  </form>
  </body>
  </html>

  程序中使用了文件對象,這樣在Upload.asp中采用BinaryRead方法讀來的原始數(shù)據(jù)就不僅僅是選擇的文件本身的數(shù)據(jù),還包含該文件在用戶硬盤上的路徑、類型、提交頁面的表單域名等相關(guān)信息的描述,這樣我們就需從中提取出文件的具體內(nèi)容。根據(jù)分析,數(shù)據(jù)的頭部信息與數(shù)據(jù)的分界線是兩對回車換行符,尾部也有分隔信息,我們可以采用類似以下的方法獲取文件數(shù)據(jù)。

  Dim FormData.FormSize,DataStart,CLStr,DivStr
  FormSize=Request.TotalBytes
  FormData=Request.BinaryRead(FormSize)
  CLStr=ChrB(13)&ChrB(10)
  DataStart=InStrB(FormData.CLStr&CLStr)+4
  '4是兩對回車換行符的長度
  DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
  DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
  FormData=MidB(FormData,DataStart,DataSize)
  FormData就是文件的內(nèi)容了。

  中間根據(jù)需要,可進(jìn)行相應(yīng)的處理。最后的工作就是將文件保存了。保存的方法可以有兩種:一種是利用VB或VC之類程序中的二進(jìn)制文件操作方法,在工程中加入適當(dāng)?shù)念愋蛶欤罱K編譯成DLL文件,使用時(shí)再將該DLL文件注冊就可以了。文件存貯程序如下:

  Public Function SaveFile(Pathname As String) As String
      Dim objContext As ObjectContext
      Dim objRequest As Request
   Set objContext=GetObjectContext()
      Set objRequest=objContext("Request")
      '以下的一段代碼是進(jìn)行文件存貯的有關(guān)操作
   Dim FormData() As Byte,CLStr,DivStr
      Dim DataStart As Long,DataSize As Long
      DataSize=objRequest.TotalBytes
      Redim FormData(DataSize-1)
      FormData=objRequest.BinaryRead(DataSize)
      CLStr=ChrB(13) & ChrB(10)
      DataStart=InStrB(FormData,CLStr & CLStr)+4
      DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
      DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
      FormData=MidB(FormData,DataStart,DataSize)
      '創(chuàng)建一個(gè)二進(jìn)制文件并將FormData寫入其中
      Open Pathname For Binary As 1
      Put #1,,FormData
      Close #1
      SaveFile="OK!"
     End Function

  第二種方法是利用ADO STREAM中提供的二進(jìn)制文件操作方法來完成,保存文件的語句是: StreamOBJ.SaveToFile (fileName,2)。

相關(guān)軟件

相關(guān)文章

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 欧美午夜成年片在线观看 | 亚洲你xx我xx网站 | 成人欧美视频在线观看 | 国产成人深夜福利在线观看 | 国产精品欧美亚洲韩国日本久久 | 黄色一级免费片 | 亚洲成熟xxxx | 91视频看 | 免费黄网址| 九草视频在线 | 精品久久久久久中文字幕202o | 在线观着免费观看国产黄 | 很很在线视频观看 | 国产高清在线a视频大全 | 国产乱插 | 操操操免费视频 | 亚洲一区影院 | 日韩成人一区ftp在线播放 | 午夜在线视频免费 | 亚洲麻豆国产精品 | 国产精品自拍一区 | 国产一级毛片夜一级毛片 | 在线亚洲日产一区二区 | 香蕉视频色版在线观看 | 最近2019中文字幕 | 成人欧美视频在线看免费 | 国产成人福利在线 | 久久久男女野外野战 | 日韩小视频在线观看 | 1024亚洲精品国产 | 欧美xx视频| 伦理片免费看 | 天天综合久久 | 天天弄天天操 | 亚洲欧美在线综合一区二区三区 | 日本亚洲免费 | 天天操夜夜操视频 | 中文字幕视频在线 | 精品在线播放 | 多人乱p欧美4p | 国产精品免费大片一区二区 |