欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
ASP中實(shí)現文件上傳方法的研究
摘要:在基于瀏覽器/服務(wù)器的應用環(huán)境中,在瀏覽器中上傳各種類(lèi)型的文件一直是困擾用戶(hù)文件管理應用的難題之一。在HTTP中上傳文件有三種機制:RFC1867,PUT和WebDAV。常用的實(shí)現方法是利用在RFC1867中引入的一個(gè)新類(lèi)型:File以及ADO Stream對象。本文對上述上傳方法及實(shí)現原理作了論述,并給出了具體解決實(shí)例。

  關(guān)鍵詞:ASP 組件 FILE對象

  當前,基于瀏覽器/服務(wù)器模式的應用比較流行。當用戶(hù)需要將文件傳輸到服務(wù)器上時(shí),常用方法之一是運行FTP服務(wù)器并將每個(gè)用戶(hù)的FTP默認目錄設為用戶(hù)的Web主目錄,這樣用戶(hù)就能運行FTP客戶(hù)程序并上傳文件到指定的 Web目錄。這就要求用戶(hù)必須懂得如何使用FTP客戶(hù)程序。因此,這種解決方案僅對熟悉FTP且富有經(jīng)驗的用戶(hù)來(lái)說(shuō)是可行的。 如果我們能把文件上傳功能與Web集成,使用戶(hù)僅用Web瀏覽器就能完成上傳任務(wù),這對于他們來(lái)說(shuō)將是非常方便的。但是,一直以來(lái),由于File System Object的僅能傳送文本文件的局限,所以ASP最大的難題就是文件上傳問(wèn)題。下面介紹的就是如何在基于HTTP協(xié)議的網(wǎng)頁(yè)中實(shí)現文件的上傳。

  一.通過(guò)HTTP上傳的三種機制

  通過(guò)HTTP上傳有三種機制:RFC1867, PUT 和 WebDAV。

  PUT 是在HTTP 1.1引入了一個(gè)新的HTTP動(dòng)詞。當web服務(wù)器收到一個(gè)HTTP PUT和對象名字,它將會(huì )驗證用戶(hù),接收HTTP流的內容,并把它直接存入web服務(wù)器。由于這可能會(huì )對一個(gè)web站點(diǎn)造成破壞,并且還會(huì )失去HTTP最大的優(yōu)勢:服務(wù)器可編程性。在PUT的情況下,服務(wù)器自己處理請求:沒(méi)有空間讓CGI或者ASP應用程序介入。唯一讓你的應用程序捕獲PUT的方法是在低層操作,ISAPI過(guò)濾層。由于相應的原因,PUT的應用很有限。

  而WebDAV允許web內容的分布式認證與翻譯。它引入了幾種新的HTTP動(dòng)詞,允許通過(guò)HTTP上傳,鎖定/解鎖,登記/檢驗web內容。Office 2000中的"Save to web" 就是通過(guò)WebDAV來(lái)實(shí)現的。如果你所感興趣的一切都是上傳內容,WebDAV應用得非常出色,它解決了很多問(wèn)題。 然而,如果你需要在你的web應用程序里面上傳文件,WebDAV對你就毫無(wú)用處可言。象HTTP PUT一樣,那些WebDAV的動(dòng)詞是被服務(wù)器解釋的,而不是web應用程序。你需要工作在ISAPI過(guò)濾層來(lái)訪(fǎng)問(wèn)WebDAV的這些動(dòng)詞,并在你的應用程序中解釋內容。

  RFC1867 (http://www.ietf.org/rfc/rfc1867.txt) 最終被W3C在HTML3.2中接受前,是作為一種建議標準。它是一種非常簡(jiǎn)單但是功能很強大的想法:在表單字段中定義一個(gè)新類(lèi)型。

<INPUT TYPE="FILE">

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

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

  而是使用:

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

  這種編碼方案在傳送大量數據的時(shí)候,比起缺省的"application/x-url-encoded"表單編碼方案,顯得效率要高得多。URL編碼只有很有限的字符集,使用任何超出字符集的字符,必須用 %nn 代替,這里的nn表示相應的2個(gè)十六進(jìn)制數字。例如,即使是普通的空格字符也要用 %20 代替。而RFC1867使用多部分MIME編碼,就象通常在e-mail消息中看到的那樣,不編碼來(lái)傳送大量數據,而只是在數據周?chē)由虾苌俚暮?jiǎn)單但實(shí)用的頭部。主要瀏覽器的廠(chǎng)商都采用了建議的"瀏覽..."按鈕,用戶(hù)能很容易的使用本地"打開(kāi)文件..." 對話(huà)框選擇要上傳的文件。

  RFC1867仍然將大多數文件上傳的靈活方法留給了你的web應用程序。PUT用得很有限。WebDAV對內容的作者很有用,比如FrontPage用戶(hù),但是對想在web應用程序中加入文件上傳的web開(kāi)發(fā)者來(lái)說(shuō)很少用到。因此,RFC1867是在web應用程序中加入文件上傳的最好的辦法。

  在實(shí)際應用中,微軟免費提供了Posting Acceptor 。ASP不懂"multipart/form-data" 編碼方案。取而代之,微軟提供了Posting Acceptor ,Posting Acceptor是一種在上傳完成后,接受REPOST到一個(gè)ASP頁(yè)的ISAPI應用程序。

  Software Artisans的SA-FileUp是最早的商業(yè)Active Server組件之一。幾經(jīng)改進(jìn),現在作為一個(gè)純粹的ASP組件存在。

  二.基于A(yíng)SP的文件上傳實(shí)現原理分析

  基本原理是:采用ADO Stream對象的BinaryRead方法將FORM中的所有數據讀出,從中截取出所需的文件數據,以二進(jìn)制文件方式存盤(pán)。

  下面是上傳文件頁(yè)面的一個(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方法讀來(lái)的原始數據就不僅僅是選擇的文件本身的數據,還包含該文件在用戶(hù)硬盤(pán)上的路徑、類(lèi)型、提交頁(yè)面的表單域名等相關(guān)信息的描述,這樣我們就需從中提取出文件的具體內容。根據分析,數據的頭部信息與數據的分界線(xiàn)是兩對回車(chē)換行符,尾部也有分隔信息,我們可以采用類(lèi)似以下的方法獲取文件數據。

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是兩對回車(chē)換行符的長(cháng)度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData就是文件的內容了。

  中間根據需要,可進(jìn)行相應的處理。最后的工作就是將文件保存了。保存的方法可以有兩種:一種是利用VB或VC之類(lèi)程序中的二進(jìn)制文件操作方法,在工程中加入適當的類(lèi)型庫,最終編譯成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寫(xiě)入其中
    Open Pathname For Binary As 1
    Put #1,,FormData
    Close #1
    SaveFile="OK!"
   End Function

  第二種方法是利用ADO STREAM中提供的二進(jìn)制文件操作方法來(lái)完成,保存文件的語(yǔ)句是: StreamOBJ.SaveToFile (fileName,2)。在 這種操作中,我們可以將有關(guān)的操作存放在一個(gè)類(lèi)文件中,在應用時(shí),直接將該類(lèi)文件包含在A(yíng)SP程序中就可以了。具體處理方法,請參閱有關(guān)介紹。

  三.文件上傳實(shí)現方法實(shí)例

  實(shí)現文件上傳可使用組件或無(wú)組件方式。對于組件類(lèi),比如說(shuō)microsoft posting acceptor(簡(jiǎn)稱(chēng)mpa),就是微軟公司發(fā)布的一個(gè)免費服務(wù)器組件,這類(lèi)組件的安裝也比較方便。對于微軟的mpa,運行它的安裝文件就可以了。而一般的dll組件形式的,我們則需要進(jìn)行注冊。例如,要使用aspcnUP.dll,只要在Window 2000上執行regsvr32 [path]aspcnUP.dll,系統出現注冊成功的信息提示就可以使用該組件了;對于無(wú)組件類(lèi),如www.5xsoft.com的無(wú)組件上傳類(lèi)-upload_5xsoft。在使用時(shí),只要在處理程序中包含以下的語(yǔ)句就可以了:

<!--#include FILE="upload.inc"-->
set upload=new upload_5xSoft 建立上傳對象

  有關(guān)的屬性與操作方法,請參閱該組件的使用手冊。

  下面是以aspcnUP.dll組件為例,上傳部分類(lèi)型文件的源代碼(upload.asp):

<% @ language="vbscript"
 Set fileUP=Server.CreateObject("aspcn.Upload")
 fileUP.Maxsize=200000
 fileUP.Path="d:upfile"
 fileUP.Upload
 For i=0 to fileUP.Count
  fieldname=fileUP.FieldName(i)
  If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
   fileUP.Save fieldname
  End If
 Next
 Set fileUP=Nothing
%>

  四.結束語(yǔ)

  瀏覽器/服務(wù)器應用模式還在快速地發(fā)展著(zhù),在微軟新推出的ASP.NET中,已經(jīng)內置了文件上傳的功能,使用非常簡(jiǎn)單方便。作為一種全新的技術(shù),ASP.NET并不只是ASP的簡(jiǎn)單升級,它是一個(gè)用于Web開(kāi)發(fā)的全新框架,其中包含了許多新的特性。ASP.NET提供了更易于編寫(xiě)、結構更清晰的代碼,利用這些代碼我們將會(huì )更容易地進(jìn)行再利用和共享,從而開(kāi)發(fā)出更多更實(shí)用的程序來(lái)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用ASP實(shí)現文件上載(上傳)的各種方法 | ASP文章中心 | ASP | SQL SERVER | XMLHTTP | ACCESS | PhpUp Studio
NAS 共享文件用哪種格式,NFS、SMB、FTP、WebDAV 各有何優(yōu)勢?
解決無(wú)IISXP系統無(wú)IIS如何安裝IIS
IIS7.5安全配置研究
IIS寫(xiě)權限利用續以及寫(xiě)權限漏洞來(lái)由解釋 – WebShell'S Blog
Web中間件常見(jiàn)漏洞總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久