用VB的INET控件進行文件的自動上傳下載服務_第1頁
用VB的INET控件進行文件的自動上傳下載服務_第2頁
用VB的INET控件進行文件的自動上傳下載服務_第3頁
用VB的INET控件進行文件的自動上傳下載服務_第4頁
用VB的INET控件進行文件的自動上傳下載服務_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、用VB的INET控件進行文件的自動上傳下載服務用VB的INET控件做FTP的上傳文件: sys_time = CDate(Now) sys_time = Replace(sys_time, ":", "") sys_time = Replace(sys_time, " ", "")erName = "ll" Inet1.Password = "ll" Inet1.Protocol = icFTP Inet1.RemoteHost = "1&qu

2、ot; Inet1.RemotePort = "27" Inet1.Execute , "PUT Dial.wav" + " " + newNameInet 控件也叫Internet Transfer 控件,這個控件封裝了http協(xié)議以及ftp協(xié)議,使用起來非常方便。所以大家經(jīng)常使用。然而大家通常使用的只是其部分功能,接下來我們講一下它的全部詳細功能,看過之后你也許會有眼前一亮的感覺。會猛然覺得我們之前懂得的只是皮毛。Internet Transfer 控件實現(xiàn)了兩種廣泛使用的 Internet 協(xié)議:超文本傳送協(xié)議(HyperTex

3、t Transfer Protocol)(也就是HTTP) 和文件傳送協(xié)議( Protocol) (即FTP)。使用 Internet Transfer 控件可以通過 OpenURL 或 Execute 方法連接到任何使用這兩個協(xié)議的站點并檢索文件??梢宰龅降拇篌w方向在應用程序中添加 FTP 瀏覽器。創(chuàng)建自動從公共 FTP 站點下載文件的應用程序。分析 World Wide Web 站點中的圖形引用,并只下載圖形。提供以自定義格式顯示從 Web 頁獲得的動態(tài)數(shù)據(jù)?;静僮鱅nternet Transfer 控件的功能依賴于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來不盡相同,所能夠進行的操作就

4、依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。然而,有些過程對兩個協(xié)議是通用的。最基本的,如果要使用任何一個協(xié)議,則必須:將 AccessType 屬性設置為合法的代理服務器。用合法的 URL 調(diào)用 OpenURL 方法。用合法的 URL 和協(xié)議支持的命令調(diào)用 Execute 方法。用 GetChunk 方法從緩沖區(qū)獲取數(shù)據(jù)。設置 AccessType 屬性:使用代理服務器為了與 Internet 建立任何形式的連接,必須確定計算機如何連接到 Internet 上。如果在 intranet 上,可能需要提供代理服務器才能連接到 Internet

5、上。簡單地說,代理服務器是計算機和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計算機,都必須通過代理服務器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請求,也就保護了 intranet 不受破壞。要查找計算機中的代理設置值,請按照以下步驟執(zhí)行:打開控制面板的Internet選項。在“Internet選項”對話框中,單擊“連接”。在“代理服務器”中,確認選中了“通過代理服務器連接”復選框。如果選中了,則單擊“設置”。在該對話框中可以找到能夠用于多種協(xié)議的代理服務器的名稱。如果沒有定義代理服務器,請

6、與系統(tǒng)管理員聯(lián)系,以獲得可用的代理服務器。如果希望使用對話框中未列出的代理服務器,可將 AccessType 屬性設置為 icNamedProxy (2)。然后將 Proxy 屬性設置為代理服務器的名稱,如下面的代碼所示:Inet1.Proxy = "myProxyName"Inet1.AccessType = icNamedProxy另一方面,如果希望使用缺省代理服務器(由計算機的注冊表決定),則可以忽略 Proxy 屬性,而只需將 AccessType 設置為 icUseDefault (0)。AccessType 的設置值在下表中列出:常數(shù) 值 描述icUseDefa

7、ult 0 (缺?。┯米魅笔???丶褂米员碇械娜笔≡O置訪問 Internet。icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。icNamedProxy 2 命名的代理服務器。指示該控件使用 Proxy 屬性確定的代理服務器。調(diào)用 OpenURL 方法'名為“Text1”的 TextBox 控件保存了'該方法的結(jié)果。Internet 傳輸'控件的名稱是“Inet1”。Text1.Text = Inet1.OpenURL("")作為結(jié)果,TextBox 控件保存了 HTML 源碼,它看上去應和下圖顯示的相似:在這

8、種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實際的文件。例如,下面的代碼:Text1.Text = Inet1. _OpenURL("將獲得文件的實際文本,如下所示:提示 在使用 OpenURL 或 Execute 方法時,不需要設置 Protocol 屬性。Internet Transfer 控件會自動按 URL 的協(xié)議部分確定的協(xié)議來設置。最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點提供了搜索數(shù)據(jù)庫的能力。要搜索數(shù)據(jù)庫,則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼

9、用條件“find=Maui”調(diào)用名為“searce”的搜索引擎。Dim strURL As StringstrURL = ""TeRL(strURL)如果搜索引擎找到了符合條件的內(nèi)容,將合成一個 HTML 文檔并攜帶適當?shù)男畔⒎祷?。?OpenURL 方法保存到文件如果需要將通過 OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語句,如下面的代碼所示。該示例先將獲得的二進制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中:Dim strURL As StringDim bData() As Byte '數(shù)據(jù)變量Dim int

10、Integer '可用文件變量strURL = _" xe"intFile = FreeFile() '將 intFile 設置為未使用的文件' OpenURL 方法的結(jié)果首先傳入 Byte 數(shù)組,'然后將 Byte 數(shù)組保存到磁盤。bData() = Inet1.OpenURL(strURL, icByteArray)Open "C:TempSoftlib.e xe" For Binary Access Write _As #intFilePut #intFile, , bData()Close #intFile可用類似

11、的過程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中:Dim strURL As String 'URL 字符串Dim int Integer '可用文件變量IntFile = FreeFile()strURL = ""Open "c:tempMSsource.txt" For Output _As #IntFileWrite #IntFile, Inet1.OpenURL(strURL)Close #IntFile同步和異步傳輸OpenURL 方法以同步方式傳輸數(shù)據(jù)。在這里,同步指的是傳輸操作未完成

12、之前,不能執(zhí)行其它過程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時,傳輸操作與其它過程無關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺接收數(shù)據(jù)的同時,即可同時執(zhí)行其它代碼。對 Internet Transfer 控件的使用者來說這意味著什么?簡單地說,用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說,如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控件的連接狀態(tài)。當達到適當?shù)臓顟B(tài)時,調(diào)用

13、 GetChunk 方法從控件的緩沖區(qū)獲取數(shù)據(jù)。下面更詳細地討論這一操作。在 FPT 協(xié)議中使用 Execute 方法Execute 方法具有四個參數(shù):url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 參數(shù)和 url 參數(shù),其中后者是可選的。例如,要從遠程計算機中得到一個文件,可用下面的代碼:Inet1.Execute "", _"GET disclaimer.txt C:TempDisclaimer.txt"如果正在用 FTP 從匿名 FTP 服務器中獲取文件,就應熟悉在服務器目錄樹中漫游

14、的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應使用帶有希望改變到的目錄路徑的“CD”命令。對絕大多數(shù)通用操作,如將文件傳入服務器,以及從服務器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑:'txtURL 文本框包含了要打開的路徑。'txtRemotePath 文本框包含了要改變到的路徑。Inet1.Execute txtURL.Text, "CD " & txtRemoteext注意

15、 在 Execute 方法中使用 FTP 命令時,沒有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進行傳遞;參數(shù)之間用空格進行分隔。在下面的描述中,不要把“file1”和“file2”項與 data 和 requestHeaders 參數(shù)搞混。FTP 操作的語法是:operationName file1 file2例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個文件名:'得到名為“Disclaimer.txt”的文件,并將其復制到' t。Inet1.Execute,

16、_"GET Disclaimer.txt C:TempDisclaimer.txt"下表列出了該控件支持的 FTP 命令:操作 描述 示例CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , "CD docsmydocs"CDUP 改變到父目錄。功能與“CD .”相同。 Execute , "CDUP"DELETE file1 刪除由 file1 指定的文件。 Execute , "DELETE discard.txt"DIR file1 在由 file1 指定的目錄中查找。如果沒有

17、指定 file1 目錄,則查找當前工作目錄。使用 GetChunk 方法返回數(shù)據(jù)。 Execute , "DIR /mydocs"GET file1 file2 獲取由 file1 指定的遠程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _"GET getme.txt C:gxt"MKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Execute , "MKDIR /myDir"PUT file1 file2 將由 file1 指定的本地文件,復制到由 f

18、ile2 指定的遠程主機文件中。 Execute , _"PUT C:putme.txt /putme.txt"PWD 打印工作目錄。返回當前目錄的名稱。用 GetChunk 方法返回數(shù)據(jù)。 Execute , "PWD"QUIT 結(jié)束當前連接。 Execute , "QUIT"RECV file1 file2 與 GET 相同。 Execute , _"RECV getme.txt C:gotme.txt"RENAME file1 file2 文件重命名。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Exe

19、cute ,"RENAME old.txt new.txt"RMDIR file1 刪除目錄。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Execute , "RMDIR oldDir"SEND file1 將文件復制到 FTP 站點。(與 PUT 相同) Execute , _"SEND C:putme.txt /putme.txt"SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /large"重點 如果代理服務器是 CERN 代理服務器,就不允許使用直接的 FTP

20、 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那樣。還可以用 OpenURL 方法得到目錄列表,即將目標目錄作為 URL,并調(diào)用該方法。在 HTTP 協(xié)議上使用 Execute 方法HTTP 協(xié)議允許客戶機用 GET、HEAD、POST 和 PUT 命令向服務器請求數(shù)據(jù)。下表中列出了這些操作:操作 描述 示例GET 獲取 url 中命名的文件。 Execute "" & _"/Index.html",

21、"GET"HEAD 只獲取 URL 屬性中命名的文件的文件標頭。 Execute , "HEAD"POST 方法提供附加數(shù)據(jù)(學過網(wǎng)頁制作的或?qū)W過http協(xié)議的應該知道),以支持向遠程主機的請求。 Execute , "POST", strFormDataPUT 替換指定的 URL 中的數(shù)據(jù)。 Execute , "PUT", "replace.htm"通用網(wǎng)關(guān)接口和 Execute 方法很多 World Wide Web 站點提供了搜索數(shù)據(jù)庫的能力。它是通過 HTTP 協(xié)議用通用網(wǎng)關(guān)接口 (C

22、GI) 發(fā)送查詢的能力完成的。在這里不再討論 CGI 了。然而,如果對 CGI 比較了解,就可用 Execute 方法構(gòu)造一個應用程序模擬 World Wide Web 站點的行為。例如,下面的代碼給出了典型的 CGI 查詢字符串:如下所示,用 Execute 方法也可以發(fā)送同樣的查詢:Dim strURL As String, strFormData As StringstrURL = ""strFormData = "wd=ibiancheng"Inet1.E xecute strURL, "POST", strFormData如

23、果希望得到從服務器發(fā)回的結(jié)果(如上面的示例所示),就必須使用控件的 GetChunk 方法以獲取作為結(jié)果的 HTML 文檔。在 State 事件中使用 GetChunk 方法在從遠程計算機下載數(shù)據(jù)時,將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務器獲取請求的文件。當獲取了整個文件之后,State 參數(shù)將返回 icResponseCompleted (12)。在這時候,就可以用 GetChunk 方法從緩沖區(qū)中獲取數(shù)據(jù)了。下面的示例中給出了這種情況:Private Sub Inet1_StateChanged(ByVal State As Integer)Dim vt

24、Data As Variant '數(shù)據(jù)變量。Select Case State'.沒有給出其它情況。Case icResponseCompleted '12'打開文件用于寫入。Open txtOperation For Binary Access _Write As #intFile'得到第一個大塊。注意:指定 Byte 數(shù)組' (icByteArray) 以獲取二進制文件。vtData = Inet1.GetChunk(1024, icString)Do While LenB(vtData) > 0Put #intFile, , vtDa

25、ta'得到下一大塊。etChunk(1024, icString)LoopPut #intFile, , vtDataClose #intFileEnd SelectEnd Sub登錄到 FTP 服務器FTP 服務器有兩種:公用的和私用的。公用服務器,顧名思義,是對所有人開放的。而私用服務器,除了該服務器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個參數(shù)用來驗明用戶,并允許(或禁止)進一步的操作。要登錄到公用服務器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然后發(fā)送用戶的電子郵件名稱作為密碼

26、。然而使用 Internet 傳輸控件這一過程還能夠進一步簡化。按照缺省規(guī)定,如果沒有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。如果要登錄到私用服務器,只需適當?shù)卦O置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示:With Inet1.URL = "".UserName = "John Smith".Password = "mAuI&9$6".Execute ,"DI

27、R" '返回該目錄。.Execute ,"CLOSE" '關(guān)閉連接。End With在調(diào)用 Execute 方法之后,F(xiàn)TP連接仍舊打開著。這時可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過改變 URL 屬性,并調(diào)用 OpenURL 或 Execute 方法,自動關(guān)閉該連接,這樣的操作會關(guān)閉當前 FTP 連接,并打開新的 URL或IP。使用 Internet Transfer 控件 Internet Transfer 控件實現(xiàn)

28、了兩種廣泛使用的 Internet 協(xié)議: 超文本傳送協(xié)議(HyperText Transfer Protocol)(HTTP) 和文件傳送協(xié)議( Protocol) (FTP)。使用 Internet Transfer 控件可以通過 OpenURL 或 Execute 方法連接到任何使用這兩個協(xié)議的站點并檢索文件。 可能的用途 在應用程序中添加 FTP 瀏覽器。 創(chuàng)建自動從公共 FTP 站點下載文件的應用程序。 分析 World Wide Web 站點中的圖形引用,并只下載圖形。 提供以自定義格式顯示從 Web 頁獲得的動態(tài)數(shù)據(jù)。 基本操作 Internet Transfer 控件的功能依賴

29、于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來不盡相同,所能夠進行的操作就依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。 然而,有些過程對兩個協(xié)議是通用的。最基本的,如果要使用任何一個協(xié)議,則必須: 將 AccessType 屬性設置為合法的代理服務器。 用合法的 URL 調(diào)用 OpenURL 方法。 用合法的 URL 和協(xié)議支持的命令調(diào)用 Execute 方法。 用 GetChunk 方法從緩沖區(qū)獲取數(shù)據(jù)。 設置 AccessType 屬性:使用代理服務器 為了與 Internet 建立任何形式的連接,必須確定計算機如何連接到 Internet

30、 上。如果在 intranet 上,可能需要提供代理服務器才能連接到 Internet 上。 簡單地說,代理服務器是計算機和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計算機,都必須通過代理服務器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請求,也就保護了 intranet 不受破壞。 要查找計算機中的代理設置值,請按照以下步驟執(zhí)行: 注意 下面的步驟只能用于 Windows 95 和 系統(tǒng)。 在計算機的“任務欄”中,單擊“啟動”。 在“設置”項中,單擊“控制面板”。 雙擊“Internet”圖

31、標。 在“Internet 屬性”對話框中,單擊“連接”。 在“代理服務器”中,確認選中了“通過代理服務器連接”復選框。 如果選中了,則單擊“設置”。在該對話框中可以找到能夠用于多種協(xié)議的代理服務器的名稱。如果沒有定義代理服務器,請與系統(tǒng)管理員聯(lián)系,以獲得可用的代理服務器。 如果希望使用對話框中未列出的代理服務器,可將 AccessType 屬性設置為 icNamedProxy (2)。然后將 Proxy 屬性設置為代理服務器的名稱,如下面的代碼所示: Inet1.Proxy = "myProxyName" Inet1.AccessType = icNamedProxy 另

32、一方面,如果希望使用缺省代理服務器(由計算機的注冊表決定),則可以忽略 Proxy 屬性,而只需將 AccessType 設置為 icUseDefault (0)。 AccessType 的設置值在下表中列出: 常數(shù) 值 描述 icUseDefault 0 (缺省)用作缺省。控件使用注冊表中的缺省設置訪問 Internet。 icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。 icNamedProxy 2 命名的代理服務器。指示該控件使用 Proxy 屬性確定的代理服務器。 調(diào)用 OpenURL 方法 設置完 AccessType 屬性后,最基本的操作就是

33、用合法的 URL 調(diào)用 OpenURL 方法。使用 OpenURL 方法時,操作所得到的結(jié)果將依賴于目標 URL。例如下面的 URL 將返回在中找到的 HTML 文檔: '名為“Text1”的 TextBox 控件保存了 '該方法的結(jié)果。Internet 傳輸 '控件的名稱是“Inet1”。 Text1.Text = Inet1.OpenURL("") 作為結(jié)果,TextBox 控件保存了 HTML 源碼,它看上去應和下圖顯示的相似: 在這種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實際

34、的文件。例如,下面的代碼: Text1.Text = Inet1. _ OpenURL(".com/disclaimer.txt") 將獲得文件的實際文本,如下所示: 提示 在使用 OpenURL 或 Execute 方法時,不需要設置 Protocol 屬性。Internet Transfer 控件會自動按 URL 的協(xié)議部分確定的協(xié)議來設置。 最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點提供了搜索數(shù)據(jù)庫的能力。要搜索數(shù)據(jù)庫,則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼用條件“find=Maui”調(diào)用名為“e”的搜索引

35、擎。 Dim strURL As String strURL = _ " xe?find=maui Text1.Text = Inet1.OpenURL(strURL) 如果搜索引擎找到了符合條件的內(nèi)容,將合成一個 HTML 文檔并攜帶適當?shù)男畔⒎祷亍?用 OpenURL 方法保存到文件 如果需要將通過 OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語句,如下面的代碼所示。該示例先將獲得的二進制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中: Dim strURL As String Dim bData() As Byte '數(shù)據(jù)變

36、量 Dim int Integer '可用文件變量 strURL = _ " xe" intFile = FreeFile() '將 intFile 設置為未使用的文件 ' OpenURL 方法的結(jié)果首先傳入 Byte 數(shù)組, '然后將 Byte 數(shù)組保存到磁盤。 bData() = Inet1.OpenURL(strURL, icByteArray) Open "C:TempSoftlib.e xe" For Binary Access Write _ As #intFile Put #intFile, , bData(

37、) Close #intFile 可用類似的過程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中: Dim strURL As String 'URL 字符串 Dim int Integer '可用文件變量 IntFile = FreeFile() strURL = "" Open "c:tempMSsource.txt" For Output _ As #IntFile Write #IntFile,(strURL) Close #IntFile 同步和異步傳輸 OpenURL 方法以同步方式傳輸數(shù)據(jù)

38、。在這里,同步指的是傳輸操作未完成之前,不能執(zhí)行其它過程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。 而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時,傳輸操作與其它過程無關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺接收數(shù)據(jù)的同時,即可同時執(zhí)行其它代碼。 對 Internet Transfer 控件的使用者來說這意味著什么?簡單地說,用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說,如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控

39、件的連接狀態(tài)。當達到適當?shù)臓顟B(tài)時,調(diào)用 GetChunk 方法從控件的緩沖區(qū)獲取數(shù)據(jù)。下面更詳細地討論這一操作。 在 FPT 協(xié)議中使用 Execute 方法 Execute 方法具有四個參數(shù):url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 參數(shù)和 url 參數(shù),其中后者是可選的。例如,要從遠程計算機中得到一個文件,可用下面的代碼: Inet1.Execute "", _ "GET disclaimer.txt C:TempDisclaimer.txt" 如果正在用 FTP 從匿名 FTP

40、 服務器中獲取文件,就應熟悉在服務器目錄樹中漫游的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應使用帶有希望改變到的目錄路徑的“CD”命令。 對絕大多數(shù)通用操作,如將文件傳入服務器,以及從服務器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑: 'txtURL 文本框包含了要打開的路徑。 'txtRemotePath 文本框包含了要改變到的路徑。 Inet1.Execute txtURL.Text, "CD

41、 " & txtRemotePath.Text 注意 在 Execute 方法中使用 FTP 命令時,沒有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進行傳遞;參數(shù)之間用空格進行分隔。在下面的描述中,不要把“file1”和“file2”項與 data 和 requestHeaders 參數(shù)搞混。 FTP 操作的語法是: operationName file1 file2 例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個文件名: '得到名為“t”的文件,并將其

42、復制到 t。 Inet1.Execute, _ "GET Disclaimer.txt C:TempDisclaimer.txt" 下表列出了該控件支持的 FTP 命令: 操作 描述 示例 CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , "CD docsmydocs" CDUP 改變到父目錄。功能與“CD .”相同。 Execute , "CDUP" DELETE file1 刪除由 file1 指定的文件。 Execute , "DELETE discard.txt" DIR

43、 file1 在由 file1 指定的目錄中查找。如果沒有指定 file1 目錄,則查找當前工作目錄。使用 GetChunk 方法返回數(shù)據(jù)。 Execute , "DIR /mydocs" GET file1 file2 獲取由 file1 指定的遠程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _ "GET getme.txt C:gotme.txt" MKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Execute , "MKDIR /myDir"

44、PUT file1 file2 將由 file1 指定的本地文件,復制到由 file2 指定的遠程主機文件中。 Execute , _ "PUT C:putme.txt /putme.txt" PWD 打印工作目錄。返回當前目錄的名稱。用 GetChunk 方法返回數(shù)據(jù)。 Execute , "PWD" QUIT 結(jié)束當前連接。 Execute , "QUIT" RECV file1 file2 與 GET 相同。 Execute , _ "RECV getme.txt C:gotme.txt" RENAME fi

45、le1 file2 文件重命名。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Execute , "RENAME old.txt new.txt" RMDIR file1 刪除目錄。是否能夠成功地執(zhí)行,取決于用戶在遠程主機上的權(quán)限。 Execute , "RMDIR oldDir" SEND file1 將文件復制到 FTP 站點。(與 PUT 相同) Execute , _ t /putme.txt" SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /large" 重點 如果代

46、理服務器是 CERN 代理服務器,就不允許使用直接的 FTP 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那樣。還可以用 OpenURL 方法得到目錄列表,即將目標目錄作為 URL,并調(diào)用該方法。 在 HTTP 協(xié)議上使用 Execute 方法 HTTP 協(xié)議允許客戶機用 GET、HEAD、POST 和 PUT 命令向服務器請求數(shù)據(jù)。下表中列出了這些操作: 操作 描述 示例 GET 獲取 url 中命名的文件。 Execute ""

47、; & _ "/default.htm", "GET" HEAD 只獲取 URL 屬性中命名的文件的文件標頭。 Execute , "HEAD" POST 提供附加數(shù)據(jù),以支持向遠程主機的請求。 Execute , "POST", strFormData PUT 替換指定的 URL 中的數(shù)據(jù)。 Execute , "PUT", "replace.htm" 通用網(wǎng)關(guān)接口和 Execute 方法 很多 World Wide Web 站點提供了搜索數(shù)據(jù)庫的能力。它是通過 H

48、TTP 協(xié)議用通用網(wǎng)關(guān)接口 (CGI) 發(fā)送查詢的能力完成的。 在這里不再討論 CGI 了。然而,如果對 CGI 比較了解,就可用 Execute 方法構(gòu)造一個應用程序模擬 World Wide Web 站點的行為。例如,下面的代碼給出了典型的 CGI 查詢字符串: xe?find=Hangzhou 如下所示,用 Execute 方法也可以發(fā)送同樣的查詢: Dim strURL As String, strFormData As String strURL = "/ xe" strFormData = "find=Hangzhou" Inet1.E xe

49、cute strURL, "POST", strFormData 如果希望得到從服務器發(fā)回的結(jié)果(如上面的示例所示),就必須使用 GetChunk 方法以獲取作為結(jié)果的 HTML 文檔。 在 State 事件中使用 GetChunk 方法 在從遠程計算機下載數(shù)據(jù)時,將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務器獲取請求的文件。當獲取了整個文件之后,State 參數(shù)將返回 icResponseCompleted (12)。在這時候,就可以用 GetChunk 方法從緩沖區(qū)中獲取數(shù)據(jù)了。下面的示例中給出了這種情況: Private Sub Inet

50、1_StateChanged(ByVal State As Integer) Dim vtData As Variant '數(shù)據(jù)變量。 Select Case State '.沒有給出其它情況。 Case icResponseCompleted '12 '打開文件用于寫入。 Open txtOperation For Binary Access _ Write As #intFile '得到第一個大塊。注意:指定 Byte 數(shù)組 ' (icByteArray) 以獲取二進制文件。 vtData = Inet1.GetChunk(1024, icS

51、tring) Do While LenB(vtData) > 0 Put #intFile, , vtData '得到下一大塊。 vtData = Inet1.GetChunk(1024, icString) Loop Put #intFile, , vtData Close #intFile End Select End Sub 登錄到 FTP 服務器 FTP 服務器有兩種:公用的和私用的。公用服務器,顧名思義,是對所有人開放的。而私用服務器,除了該服務器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個參數(shù)用來驗明用戶,并允許(或禁止)進一

52、步的操作。 要登錄到公用服務器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然后發(fā)送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過程還能夠進一步簡化。按照缺省規(guī)定,如果沒有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。 如果要登錄到私用服務器,只需適當?shù)卦O置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示: With Inet1 .URL = "" .U

53、serName = "John Smith" .Password = "mAuI&9$6" .Execute ,"DIR" '返回該目錄。 .Execute ,"CLOSE" '關(guān)閉連接。 End With 在調(diào)用 Execute 方法之后,F(xiàn)TP 連接仍舊打開著。這時可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過改變 URL 屬性,并調(diào)用 OpenURL 或 Exec

54、ute 方法,自動關(guān)閉該連接,這樣的操作會關(guān)閉當前 FTP 連接,并打開新的 URL對于FTP,你可以使用Execute方法執(zhí)行FTP命令SIZE獲得文件大小。然后在StateChanged事件中可以獲得返回的文件大小。 Private Sub Command1_Click() Inet1.Execute "", "SIZE 1.gif" End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) 'State = 12 時,用 GetChunk 方法檢索服務器的響應。 Dim v

55、tData As Variant ' Data variable. Select Case State '.沒有列舉其它情況。 Case icError '11 '出現(xiàn)錯誤時,返回 ResponseCode 和 ResponseInfo。 vtData = Inet1.ResponseCode & ":" & _ Inet1.ResponseInfo Case icResponseCompleted ' 12 Dim strData As String Dim bDone As Boolean: bDone = Fal

56、se '取得第一個塊。 vtData = Inet1.GetChunk(1024, icString) DoEvents Do While Not bDone strData = strData & vtData '取得下一個塊。 vtData = Inet1.GetChunk(1024, icString) DoEvents If Len(vtData) = 0 Then bDone = True End If Loop MsgBox strData End Select End Sub 對于HTTP下載,你可以用GetHeader(Content-length)來獲

57、得文件大小。但不是所有HTTP下載時都能獲得文件長度,特別是通過代理服務器下載文件時。如: Private Sub Form_Load() Inet1.Execute "" End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) If State = icResponseReceived Then MsgBox " is " & Inet1.GetHeader("Content-Length") End If End Sub=在VB中實現(xiàn)文件上傳 Visua

58、lBasic作為一個集應用程序開發(fā)、測試、查錯功能于一體的集成式開發(fā)環(huán)境,越來越受到程序員的青睞。筆者在開發(fā)某數(shù)據(jù)庫維護系統(tǒng)的過程中,選擇了VB5.0作為開發(fā)平臺,Unix作為服務器端操作系統(tǒng),Informix作為服務器數(shù)據(jù)庫。 問題的出現(xiàn) 在開發(fā)該維護系統(tǒng)的過程中,注意到Informix數(shù)據(jù)庫的字段類型CLOB填入數(shù)據(jù)時需要函數(shù) ("","SERVER"),其中的""需要指出文件路徑和文件名稱。然而,在維護過程中此文件是 在客戶端執(zhí)行的,這樣就要求即時將文件傳輸?shù)椒掌鞫恕?解決辦法 P傳輸工具 我們首先使用FTP傳輸工具,用VB5

59、.0中SHELL命令調(diào)用DOS批處理文件來實現(xiàn)傳輸?shù)男枰?Shell調(diào)用格式: Shell(pathname,windowstyle) 例子:Shell("c:windowsupload.bat") 批處理文件t的內(nèi)容: c:windows username password sendc:zrhupload.txtupload.txt bye 該命令實現(xiàn)了文件"的傳輸要求。在使用完畢之后,再調(diào)用命令把該文件刪除。 例子:Shell("c:windowsdel_up.bat") 批處理文件t的內(nèi)容: c:windows username password deleupload.txt bye 這樣,文件"被刪除。 但是,另一個問題出現(xiàn)了。由于Shell函數(shù)的運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論