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

下載本文檔

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

文檔簡(jiǎn)介

用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)用VB的INET控件做FTP的上傳文件: sys_time = CDate(Now) sys_time = Replace(sys_time, :, ) sys_time = Replace(sys_time, , ) Inet1.UserName = ll Inet1.Password = ll Inet1.Protocol = icFTP Inet1.RemoteHost = 1 Inet1.RemotePort = 27 Inet1.Execute , PUT Dial.wav + + newNameInet 控件也叫Internet Transfer 控件,這個(gè)控件封裝了http協(xié)議以及ftp協(xié)議,使用起來非常方便。所以大家經(jīng)常使用。然而大家通常使用的只是其部分功能,接下來我們講一下它的全部詳細(xì)功能,看過之后你也許會(huì)有眼前一亮的感覺。會(huì)猛然覺得我們之前懂得的只是皮毛。Internet Transfer 控件實(shí)現(xiàn)了兩種廣泛使用的 Internet 協(xié)議:超文本傳送協(xié)議(HyperText Transfer Protocol)(也就是HTTP) 和文件傳送協(xié)議(File Transfer Protocol) (即FTP)。使用 Internet Transfer 控件可以通過 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 頁獲得的動(dòng)態(tài)數(shù)據(jù)。基本操作Internet Transfer 控件的功能依賴于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來不盡相同,所能夠進(jìn)行的操作就依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。然而,有些過程對(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 上。簡(jiǎn)單地說,代理服務(wù)器是計(jì)算機(jī)和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計(jì)算機(jī),都必須通過代理服務(wù)器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請(qǐng)求,也就保護(hù)了 intranet 不受破壞。要查找計(jì)算機(jī)中的代理設(shè)置值,請(qǐng)按照以下步驟執(zhí)行:打開控制面板的Internet選項(xiàng)。在“Internet選項(xiàng)”對(duì)話框中,單擊“連接”。在“代理服務(wù)器”中,確認(rèn)選中了“通過代理服務(wù)器連接”復(fù)選框。如果選中了,則單擊“設(shè)置”。在該對(duì)話框中可以找到能夠用于多種協(xié)議的代理服務(wù)器的名稱。如果沒有定義代理服務(wù)器,請(qǐng)與系統(tǒng)管理員聯(lián)系,以獲得可用的代理服務(wù)器。如果希望使用對(duì)話框中未列出的代理服務(wù)器,可將 AccessType 屬性設(shè)置為 icNamedProxy (2)。然后將 Proxy 屬性設(shè)置為代理服務(wù)器的名稱,如下面的代碼所示:Inet1.Proxy = myProxyNameInet1.AccessType = icNamedProxy另一方面,如果希望使用缺省代理服務(wù)器(由計(jì)算機(jī)的注冊(cè)表決定),則可以忽略 Proxy 屬性,而只需將 AccessType 設(shè)置為 icUseDefault (0)。AccessType 的設(shè)置值在下表中列出:常數(shù) 值 描述icUseDefault 0 (缺?。┯米魅笔?。控件使用注冊(cè)表中的缺省設(shè)置訪問 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)和下圖顯示的相似:在這種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實(shí)際的文件。例如,下面的代碼:Text1.Text = Inet1. _OpenURL(/disclaimer.txt)將獲得文件的實(shí)際文本,如下所示:提示 在使用 OpenURL 或 Execute 方法時(shí),不需要設(shè)置 Protocol 屬性。Internet Transfer 控件會(huì)自動(dòng)按 URL 的協(xié)議部分確定的協(xié)議來設(shè)置。最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點(diǎn)提供了搜索數(shù)據(jù)庫的能力。要搜索數(shù)據(jù)庫,則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼用條件“find=Maui”調(diào)用名為“search.exe”的搜索引擎。Dim strURL As StringstrURL = /s?wd=ibianchengText1.Text = Inet1.OpenURL(strURL)如果搜索引擎找到了符合條件的內(nèi)容,將合成一個(gè) HTML 文檔并攜帶適當(dāng)?shù)男畔⒎祷亍S?OpenURL 方法保存到文件如果需要將通過 OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語句,如下面的代碼所示。該示例先將獲得的二進(jìn)制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中:Dim strURL As StringDim bData() As Byte 數(shù)據(jù)變量Dim intFile As Integer 可用文件變量strURL = _/Softlib/Softlib.e xeintFile = 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可用類似的過程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中:Dim strURL As String URL 字符串Dim intFile As Integer 可用文件變量IntFile = FreeFile()strURL = Open c:tempMSsource.txt For Output _As #IntFileWrite #IntFile, Inet1.OpenURL(strURL)Close #IntFile同步和異步傳輸OpenURL 方法以同步方式傳輸數(shù)據(jù)。在這里,同步指的是傳輸操作未完成之前,不能執(zhí)行其它過程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過程無關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。對(duì) Internet Transfer 控件的使用者來說這意味著什么?簡(jiǎn)單地說,用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說,如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控件的連接狀態(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 FTP:/, _GET disclaimer.txt C:TempDisclaimer.txt如果正在用 FTP 從匿名 FTP 服務(wù)器中獲取文件,就應(yīng)熟悉在服務(wù)器目錄樹中漫游的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應(yīng)使用帶有希望改變到的目錄路徑的“CD”命令。對(duì)絕大多數(shù)通用操作,如將文件傳入服務(wù)器,以及從服務(wù)器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑:txtURL 文本框包含了要打開的路徑。txtRemotePath 文本框包含了要改變到的路徑。Inet1.Execute txtURL.Text, CD & txtRemotePath.Text注意 在 Execute 方法中使用 FTP 命令時(shí),沒有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進(jìn)行傳遞;參數(shù)之間用空格進(jìn)行分隔。在下面的描述中,不要把“file1”和“file2”項(xiàng)與 data 和 requestHeaders 參數(shù)搞混。FTP 操作的語法是:operationName file1 file2例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個(gè)文件名:得到名為“Disclaimer.txt”的文件,并將其復(fù)制到 C:TempDisclaimer.txt。Inet1.Execute, _GET Disclaimer.txt C:TempDisclaimer.txt下表列出了該控件支持的 FTP 命令:操作 描述 示例CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , CD docsmydocsCDUP 改變到父目錄。功能與“CD .”相同。 Execute , CDUPDELETE file1 刪除由 file1 指定的文件。 Execute , DELETE discard.txtDIR file1 在由 file1 指定的目錄中查找。如果沒有指定 file1 目錄,則查找當(dāng)前工作目錄。使用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , DIR /mydocsGET file1 file2 獲取由 file1 指定的遠(yuǎn)程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _GET getme.txt C:gotme.txtMKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , MKDIR /myDirPUT file1 file2 將由 file1 指定的本地文件,復(fù)制到由 file2 指定的遠(yuǎn)程主機(jī)文件中。 Execute , _PUT C:putme.txt /putme.txtPWD 打印工作目錄。返回當(dāng)前目錄的名稱。用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , PWDQUIT 結(jié)束當(dāng)前連接。 Execute , QUITRECV file1 file2 與 GET 相同。 Execute , _RECV getme.txt C:gotme.txtRENAME file1 file2 文件重命名。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute ,RENAME old.txt new.txtRMDIR file1 刪除目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , RMDIR oldDirSEND file1 將文件復(fù)制到 FTP 站點(diǎn)。(與 PUT 相同) Execute , _SEND C:putme.txt /putme.txtSIZE file1 返回由 file1 指定文件的大小。 Execute SIZE /largefile.txt重點(diǎn) 如果代理服務(wù)器是 CERN 代理服務(wù)器,就不允許使用直接的 FTP 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語句的 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, GETHEAD 只獲取 URL 屬性中命名的文件的文件標(biāo)頭。 Execute , HEADPOST 方法提供附加數(shù)據(jù)(學(xué)過網(wǎng)頁制作的或?qū)W過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ù)庫的能力。它是通過 HTTP 協(xié)議用通用網(wǎng)關(guān)接口 (CGI) 發(fā)送查詢的能力完成的。在這里不再討論 CGI 了。然而,如果對(duì) CGI 比較了解,就可用 Execute 方法構(gòu)造一個(gè)應(yīng)用程序模擬 World Wide Web 站點(diǎn)的行為。例如,下面的代碼給出了典型的 CGI 查詢字符串:/s?wd=ibiancheng如下所示,用 Execute 方法也可以發(fā)送同樣的查詢:Dim strURL As String, strFormData As StringstrURL = /sstrFormData = wd=ibianchengInet1.E xecute 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 Inet1_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得到第一個(gè)大塊。注意:指定 Byte 數(shù)組 (icByteArray) 以獲取二進(jìn)制文件。vtData = Inet1.GetChunk(1024, icString)Do While LenB(vtData) 0Put #intFile, , vtData得到下一大塊。vtData = Inet1.GetChunk(1024, icString)LoopPut #intFile, , vtDataClose #intFileEnd SelectEnd Sub登錄到 FTP 服務(wù)器FTP 服務(wù)器有兩種:公用的和私用的。公用服務(wù)器,顧名思義,是對(duì)所有人開放的。而私用服務(wù)器,除了該服務(wù)器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個(gè)參數(shù)用來驗(yàn)明用戶,并允許(或禁止)進(jìn)一步的操作。要登錄到公用服務(wù)器,通常的做法是以“匿名”登錄 (UserName = anonymous),然后發(fā)送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示:With Inet1.URL = ftp:/ftp.someFTPS.UserName = John Smith.Password = mAuI&9$6.Execute ,DIR 返回該目錄。.Execute ,CLOSE 關(guān)閉連接。End With在調(diào)用 Execute 方法之后,F(xiàn)TP連接仍舊打開著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過改變 URL 屬性,并調(diào)用 OpenURL 或 Execute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開新的 URL或IP。使用 Internet Transfer 控件 Internet Transfer 控件實(shí)現(xiàn)了兩種廣泛使用的 Internet 協(xié)議: 超文本傳送協(xié)議(HyperText Transfer Protocol)(HTTP) 和文件傳送協(xié)議(File Transfer Protocol) (FTP)。使用 Internet Transfer 控件可以通過 OpenURL 或 Execute 方法連接到任何使用這兩個(gè)協(xié)議的站點(diǎn)并檢索文件。 可能的用途 在應(yīng)用程序中添加 FTP 瀏覽器。 創(chuàng)建自動(dòng)從公共 FTP 站點(diǎn)下載文件的應(yīng)用程序。 分析 World Wide Web 站點(diǎn)中的圖形引用,并只下載圖形。 提供以自定義格式顯示從 Web 頁獲得的動(dòng)態(tài)數(shù)據(jù)。 基本操作 Internet Transfer 控件的功能依賴于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來不盡相同,所能夠進(jìn)行的操作就依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。 然而,有些過程對(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 上。 簡(jiǎn)單地說,代理服務(wù)器是計(jì)算機(jī)和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計(jì)算機(jī),都必須通過代理服務(wù)器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請(qǐng)求,也就保護(hù)了 intranet 不受破壞。 要查找計(jì)算機(jī)中的代理設(shè)置值,請(qǐng)按照以下步驟執(zhí)行: 注意 下面的步驟只能用于 Windows 95 和 Windows NT(R) 4.0 系統(tǒng)。 在計(jì)算機(jī)的“任務(wù)欄”中,單擊“啟動(dòng)”。 在“設(shè)置”項(xiàng)中,單擊“控制面板”。 雙擊“Internet”圖標(biāo)。 在“Internet 屬性”對(duì)話框中,單擊“連接”。 在“代理服務(wù)器”中,確認(rèn)選中了“通過代理服務(wù)器連接”復(fù)選框。 如果選中了,則單擊“設(shè)置”。在該對(duì)話框中可以找到能夠用于多種協(xié)議的代理服務(wù)器的名稱。如果沒有定義代理服務(wù)器,請(qǐng)與系統(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ù) 值 描述 icUseDefault 0 (缺?。┯米魅笔 ?丶褂米?cè)表中的缺省設(shè)置訪問 Internet。 icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。 icNamedProxy 2 命名的代理服務(wù)器。指示該控件使用 Proxy 屬性確定的代理服務(wù)器。 調(diào)用 OpenURL 方法 設(shè)置完 AccessType 屬性后,最基本的操作就是用合法的 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í)際的文件。例如,下面的代碼: Text1.Text = Inet1. _ OpenURL(/disclaimer.txt) 將獲得文件的實(shí)際文本,如下所示: 提示 在使用 OpenURL 或 Execute 方法時(shí),不需要設(shè)置 Protocol 屬性。Internet Transfer 控件會(huì)自動(dòng)按 URL 的協(xié)議部分確定的協(xié)議來設(shè)置。 最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點(diǎn)提供了搜索數(shù)據(jù)庫的能力。要搜索數(shù)據(jù)庫,則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼用條件“find=Maui”調(diào)用名為“search.exe”的搜索引擎。 Dim strURL As String strURL = _ xe?find=maui Text1.Text = Inet1.OpenURL(strURL) 如果搜索引擎找到了符合條件的內(nèi)容,將合成一個(gè) HTML 文檔并攜帶適當(dāng)?shù)男畔⒎祷亍?用 OpenURL 方法保存到文件 如果需要將通過 OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語句,如下面的代碼所示。該示例先將獲得的二進(jìn)制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中: Dim strURL As String Dim bData() As Byte 數(shù)據(jù)變量 Dim intFile As Integer 可用文件變量 strURL = _ /Softlib/Softlib.e 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() Close #intFile 可用類似的過程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中: Dim strURL As String URL 字符串 Dim intFile As Integer 可用文件變量 IntFile = FreeFile() strURL = Open c:tempMSsource.txt For Output _ As #IntFile Write #IntFile, Inet1.OpenURL(strURL) Close #IntFile 同步和異步傳輸 OpenURL 方法以同步方式傳輸數(shù)據(jù)。在這里,同步指的是傳輸操作未完成之前,不能執(zhí)行其它過程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。 而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過程無關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。 對(duì) Internet Transfer 控件的使用者來說這意味著什么?簡(jiǎn)單地說,用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說,如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控件的連接狀態(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 FTP:/, _ GET disclaimer.txt C:TempDisclaimer.txt 如果正在用 FTP 從匿名 FTP 服務(wù)器中獲取文件,就應(yīng)熟悉在服務(wù)器目錄樹中漫游的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應(yīng)使用帶有希望改變到的目錄路徑的“CD”命令。 對(duì)絕大多數(shù)通用操作,如將文件傳入服務(wù)器,以及從服務(wù)器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑: txtURL 文本框包含了要打開的路徑。 txtRemotePath 文本框包含了要改變到的路徑。 Inet1.Execute txtURL.Text, CD & txtRemotePath.Text 注意 在 Execute 方法中使用 FTP 命令時(shí),沒有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進(jìn)行傳遞;參數(shù)之間用空格進(jìn)行分隔。在下面的描述中,不要把“file1”和“file2”項(xiàng)與 data 和 requestHeaders 參數(shù)搞混。 FTP 操作的語法是: operationName file1 file2 例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個(gè)文件名: 得到名為“Disclaimer.txt”的文件,并將其復(fù)制到 C:TempDisclaimer.txt。 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 file1 在由 file1 指定的目錄中查找。如果沒有指定 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 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 file1 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 , _ SEND C:putme.txt /putme.txt SIZE file1 返回由 file1 指定文件的大小。 Execute SIZE /largefile.txt 重點(diǎn) 如果代理服務(wù)器是 CERN 代理服務(wù)器,就不允許使用直接的 FTP 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語句的 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 & _ /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ù)庫的能力。它是通過 HTTP 協(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 xecute 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 Inet1_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 得到第一個(gè)大塊。注意:指定 Byte 數(shù)組 (icByteArray) 以獲取二進(jìn)制文件。 vtData = Inet1.GetChunk(1024, icString) 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ì)所有人開放的。而私用服務(wù)器,除了該服務(wù)器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個(gè)參數(shù)用來驗(yàn)明用戶,并允許(或禁止)進(jìn)一步的操作。 要登錄到公用服務(wù)器,通常的做法是以“匿名”登錄 (UserName = anonymous),然后發(fā)送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。 如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示: With Inet1 .URL = ftp:/ftp.someFTPS .UserName = John Smith .Password = mAuI&9$6 .Execute ,DIR 返回該目錄。 .Execute ,CLOSE 關(guān)閉連接。 End With 在調(diào)用 Execute 方法之后,F(xiàn)TP 連接仍舊打開著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過改變 URL 屬性,并調(diào)用 OpenURL 或 Execute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開新的 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 vtData As Variant Data variable. Select Case State .沒有列舉其它情況。 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 = False 取得第一個(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)來獲得文件大小。但不是所有HTTP下載時(shí)都能獲得文件長(zhǎng)度,特別是通過代理服務(wù)器下載文件時(shí)。如: Private Sub Form_Load() Inet1.Execute / End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) If State = icResponseReceived Then MsgBox File size is & Inet1.GetHeader(Content-Length) End If End Sub=在VB中實(shí)現(xiàn)文件上傳 VisualBasic作為一個(gè)集應(yīng)用程序開發(fā)、測(cè)試、查錯(cuò)功能于一體的集成式開發(fā)環(huán)境,越來越受到程序員的青睞。筆者在開發(fā)某數(shù)據(jù)庫維護(hù)系統(tǒng)的過程中,選擇了VB5.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論