6.3.2 SA-FileUP組件 在很多Web網站上,一個常規要求是,服務器接受客戶機發送的文件的能力如何?在IIS 4.0里,Microsoft提供了一個名為Posting Acceptor組件完成這項工作,IIS 5.0和ASP 3.0的標準安裝中沒有該組件,如果安裝Site Server Express的話,則需要包含這一組件?梢詮腗icrosoft Web網站http://www.microsoft.com/windows/software/webpost/post_accept.htm上下載該組件。 然而,很多人發現Posting Acceptor組件在功能上有局限性且很難編程,F在一個流行的替代品是來自Software Artisans的SA-FileUP組件。與Posting Acceptor組件(僅是ISAPI型過濾器)不同,SA-FileUP組件是一個真正的ActiveX DLL服務器組件,容易集成到ASP網頁中。這意味著可以使用別的ASP頁面或組件上使用的相同的有關設定頁面安全保護及限制用戶訪問的技術。該組件也可在MTS/COM+的環境中上運行。 使用SA-FileUP組件的教程可在http://www.activeserverpages.com/upload/technique_3/站點上找到,所以這里只給出了結果。本章的示例中包含了使用該組件的示例頁面(在Chapter06目錄下的SAFileUP子目錄中),可用來了解如何使用該組件,有必要的話可從Software Artisans網站http://www.softartisans.com/上下載SA-FileUP的拷貝。 使用SA-FileUP組件 SA-FileUP組件的示例頁面創建了一個簡單的頁面,包含一個FileUpload元素和一個按鈕,并使用了HTML的INPUT元素,如圖6-28所示:
圖6-28 使用SA-FileUp組件的示例頁面 <FORM ACTION="safileup_response.asp" ENCTYPE="MULTIPART/FORM-DATA" METHOD="POST"> … <INPUT TYPE="FILE" NAME="FILE1"> … <INPUT TYPE="SUBMIT" NAME="SUB1" VALUE="Upload File"> … </FORM> 用戶提交窗體時,其中的內容傳送給了服務器,并且ASP頁面創建了一個組件實例,并且開始向服務器上傳信息,以后組件返回一系列描述上傳的文件的數據,如圖6-29所示:
圖6-29 使用SA-FileUP組件的結果 SA-FileUP組件讀取文件并把它以標準的磁盤文件或二進制的數據庫數據的形式暫存在服務器上。有了它,就能用ASP控制上傳過程、限制上傳文件的大小,甚至刪除上傳文件,也能動態地改變其名字和上傳文件的位置。
6.3.3 RegEx注冊表訪問組件 Microsoft IIS 4.0提供的一個示例組件能夠訪問服務器上的系統注冊表。這個功能有助于檢查諸如安裝的軟件的版本,或者檢查IIS和操作系統使用的各種參數。 在IIS 5.0中取消了這個組件,但如果需要這個功能,可以從其他商用版本中獲得。RegEx組件是其中之一,能夠訪問本地機器注冊表的任何部分(假如允許當前用戶訪問)。在ASP頁面的匿名訪問中,當前用戶是IUSR_machinename帳戶。 1. RegEx組件的成員 RegEx組件提供了四個讀寫注冊表的方法和一個訪問內部組件版本信息的方法,如表6-11所示。全部信息和文檔隨RegEx組件提供,其測試版本可以從http://www.stonebroom.com/下載。其附帶的示例頁面包含在本書提供的示例中,然而你需要自己下載組件本身。 表6-11 RegEx 組件方法及說明 方 法 說 明
GetRegValue(RegistryHive,SubKeyString) 從注冊表中返回給定的子鍵的缺省值,如果其值不能訪問的話,則返回一個空字符串
SetRegValue(RegistryHive,SubKeyString, NewValue) 在給定的子鍵中,創建或更新“缺省”值,把數據類型設置成Reg_SZ(字符串)。如果更新成功的話,返回True;否則,返回False
GetRegValueEx(RegistryHive,SubKeyString, ValueMane,ValueType) 從特定的子鍵中返回被命名的值,用返回數值的數據類型,更新方法的最后一個參數所指定的變量。如果數值不能訪問的話,則返回一個空字符串,并且REG_ERROR作為數據類型
SetRegValueEx(RegistryHive,SubKeyString, ValueName,NewValue,ValueType) 在給定的子鍵中,創建或更新被命名的數值,把數據類型設置為方法的最后一個參數指定的類型data_type。如果更新成功的話,返回True;否則返回False
GetInternalVersionNumber() 返回組件的內部版本號,如果是一個測試版本,返回值之中也包含這些信息
2. 使用RegEx組件 RegEx組件提供了一個用Visual Basic編寫的示例程序,可用來試驗其中包含的方法,實例程序使用RegEx組件,允許對系統注冊表的任何部分以所支持的數據類型之一或以缺省的字符串數據類型讀寫數據,如圖6-30所示。在進行任何更新之前會顯示一個警告以防止意外操作。
圖6-30 使用RegEx組件的示例程序 另外還有一個比較簡單的ASP實例,可顯示Web服務器注冊表中的一些數據,并且允許讀和設置一個“測試”子鍵?梢孕薷倪@個頁面,在你自己的應用程序中使用時沒有限制。圖6-31所示的是在NT4和IIS 4.0上運行的結果。
圖6-31 使用RegEx組件的另一示例的結果 要記住,改變注冊表中的數值可能導致系統不正常地工作,編輯注冊表內容這前應該備份注冊表文件。
6.4 小結 本章討論了ASP如何利用服務器組件增加其他組件所不能提供的特性,也考慮了服務器組件和其他類型的ASP對象(如ASP內置的對象和在腳本運行期庫中的對象)的區別。 在研究由ASP 3.0和IIS 5.0提供的可安裝組件之后,介紹了三個提供常規要求的功能的商用組件,也列出了幾個可以從Web上下載的通用組件,其中有一些是免費的或者是共享/測試版本。 然而,至今我們還有一個很重要的組件沒有涉及到,它就是ADO。在討論這個問題之前,先來討論另一個基本問題:錯誤處理和程序調試。
|