用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)_第1頁(yè)
用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)_第2頁(yè)
用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)_第3頁(yè)
用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)_第4頁(yè)
用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)用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 控件,這個(gè)控件封裝了http協(xié)議以及ftp協(xié)議,使用起來(lái)非常方便。所以大家經(jīng)常使用。然而大家通常使用的只是其部分功能,接下來(lái)我們講一下它的全部詳細(xì)功能,看過(guò)之后你也許會(huì)有眼前一亮的感覺(jué)。會(huì)猛然覺(jué)得我們之前懂得的只是皮毛。Internet Transfer 控件實(shí)現(xiàn)了兩種廣泛使用的 Internet 協(xié)議:超文本傳送協(xié)議(HyperTex

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

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

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

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

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

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

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

10、Integer '可用文件變量strURL = _" xe"intFile = FreeFile() '將 intFile 設(shè)置為未使用的文件' 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、的過(guò)程將文本文件寫入磁盤中,不同的只是不再需要 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í)行其它過(guò)程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過(guò)程無(wú)關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。對(duì) Internet Transfer 控件的使用者來(lái)說(shuō)這意味著什么?簡(jiǎn)單地說(shuō),用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說(shuō),如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控件的連接狀態(tài)。當(dāng)達(dá)到適當(dāng)?shù)臓顟B(tài)時(shí),調(diào)用

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

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

15、 在 Execute 方法中使用 FTP 命令時(shí),沒(méi)有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進(jìn)行傳遞;參數(shù)之間用空格進(jìn)行分隔。在下面的描述中,不要把“file1”和“file2”項(xiàng)與 data 和 requestHeaders 參數(shù)搞混。FTP 操作的語(yǔ)法是:operationName file1 file2例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個(gè)文件名:'得到名為“Disclaimer.txt”的文件,并將其復(fù)制到' 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 指定的目錄中查找。如果沒(méi)有

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

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

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

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

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

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

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

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

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

26、。然而使用 Internet 傳輸控件這一過(guò)程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒(méi)有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 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連接仍舊打開(kāi)著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過(guò)改變 URL 屬性,并調(diào)用 OpenURL 或 Execute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開(kāi)新的 URL或IP。使用 Internet Transfer 控件 Internet Transfer 控件實(shí)現(xiàn)

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

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

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

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

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

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

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

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

36、量 Dim int Integer '可用文件變量 strURL = _ " xe" intFile = FreeFile() '將 intFile 設(shè)置為未使用的文件 ' 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 可用類似的過(guò)程將文本文件寫入磁盤中,不同的只是不再需要 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í)行其它過(guò)程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。 而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過(guò)程無(wú)關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。 對(duì) Internet Transfer 控件的使用者來(lái)說(shuō)這意味著什么?簡(jiǎn)單地說(shuō),用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說(shuō),如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控

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

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

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

42、復(fù)制到 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 指定的目錄中查找。如果沒(méi)有指定 file1 目錄,則查找當(dāng)前工作目錄。使用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , "DIR /mydocs" GET file1 file2 獲取由 file1 指定的遠(yuǎn)程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _ "GET getme.txt C:gotme.txt" MKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "MKDIR /myDir"

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

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

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

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

48、TTP 協(xié)議用通用網(wǎng)關(guān)接口 (CGI) 發(fā)送查詢的能力完成的。 在這里不再討論 CGI 了。然而,如果對(duì) CGI 比較了解,就可用 Execute 方法構(gòu)造一個(gè)應(yīng)用程序模擬 World Wide Web 站點(diǎn)的行為。例如,下面的代碼給出了典型的 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 如果希望得到從服務(wù)器發(fā)回的結(jié)果(如上面的示例所示),就必須使用 GetChunk 方法以獲取作為結(jié)果的 HTML 文檔。 在 State 事件中使用 GetChunk 方法 在從遠(yuǎn)程計(jì)算機(jī)下載數(shù)據(jù)時(shí),將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務(wù)器獲取請(qǐng)求的文件。當(dāng)獲取了整個(gè)文件之后,State 參數(shù)將返回 icResponseCompleted (12)。在這時(shí)候,就可以用 GetChunk 方法從緩沖區(qū)中獲取數(shù)據(jù)了。下面的示例中給出了這種情況: Private Sub Inet

50、1_StateChanged(ByVal State As Integer) Dim vtData As Variant '數(shù)據(jù)變量。 Select Case State '.沒(méi)有給出其它情況。 Case icResponseCompleted '12 '打開(kāi)文件用于寫入。 Open txtOperation For Binary Access _ Write As #intFile '得到第一個(gè)大塊。注意:指定 Byte 數(shù)組 ' (icByteArray) 以獲取二進(jìn)制文件。 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 服務(wù)器 FTP 服務(wù)器有兩種:公用的和私用的。公用服務(wù)器,顧名思義,是對(duì)所有人開(kāi)放的。而私用服務(wù)器,除了該服務(wù)器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個(gè)參數(shù)用來(lái)驗(yàn)明用戶,并允許(或禁止)進(jìn)一

52、步的操作。 要登錄到公用服務(wù)器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然后發(fā)送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過(guò)程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒(méi)有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。 如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 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 連接仍舊打開(kāi)著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過(guò)改變 URL 屬性,并調(diào)用 OpenURL 或 Exec

54、ute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開(kāi)新的 URL對(duì)于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 時(shí),用 GetChunk 方法檢索服務(wù)器的響應(yīng)。 Dim v

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

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

57、得文件大小。但不是所有HTTP下載時(shí)都能獲得文件長(zhǎng)度,特別是通過(guò)代理服務(wù)器下載文件時(shí)。如: 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中實(shí)現(xiàn)文件上傳 Visua

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

59、.0中SHELL命令調(diào)用DOS批處理文件來(lái)實(shí)現(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 該命令實(shí)現(xiàn)了文件"的傳輸要求。在使用完畢之后,再調(diào)用命令把該文件刪除。 例子:Shell("c:windowsdel_up.bat") 批處理文件t的內(nèi)容: c:windows username password deleupload.txt bye 這樣,文件"被刪除。 但是,另一個(gè)問(wèn)題出現(xiàn)了。由于Shell函數(shù)的運(yùn)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論