㈠ 怎樣用vba實現文件上傳到ftp服務中
VBA訪問FTP進行文件傳輸的,網路上見到3種方式,用過2種。
一、VBA+DOS批處理的方式,本質上還是通過DOS來進行,有點麻煩,而且運行中會彈出CMD窗口,現在已經不用這種方法了。
VBA寫DOS:
OpengetfdForOutputAs#1
Print#1,""
Print#1,"("
Print#1,"echo;openxx.xx.xx.xx"
Print#1,"echo;user"
Print#1,"echo;pwd"
Print#1,"echo;cd""";ftpfdx8;""""
Print#1,"echo;prompt"
Print#1,"echo;dir"
Print#1,"echo;bye"
Print#1,")>""";fdx8;""""
Print#1,
Print#1,"ftp-v-i-s:""";fdx8;"""|find""ftpgroup"">""";folderx8;""""
Print#1,
VBA運行它:
Shell("ftp-v-i-s:"&ftpfile)
二、VBA調用API,具體是basp21.dll
詳見http://www.hi-ho.ne.jp/babaq/eng/basp21f.html,說明很詳細,有實例
示例如下,比較簡單易懂,其中getfile為下載,上傳使用putfile就好了。
PrivateSubForm_Load()
DimftpAsObject,rcAsLong,vAsVariant,v2AsVariant
DimctrAsLong
Setftp=CreateObject("basp21.FTP")
ftp.OpenLog"c: emplog.txt"
rc=ftp.Connect("ftp.microsoft.com","anonymous","")
Ifrc=0Then
v=ftp.GetDir("bussys/winnt/winnt-public",2)
IfIsArray(v)Then
ForEachv2Inv
Debug.Printv2
Next
EndIf
v=ftp.GetDir("bussys/winnt/winnt-public")
IfIsArray(v)Then
ForEachv2Inv
Debug.Printv2
Next
EndIf
rc=ftp.GetFile("bussys/winnt/winnt-public/*","c: emp")
EndIf
End
EndSub
㈡ vb編寫ftp 能上傳下載文件
1、利用Inet控制項上傳文件
格式:inet1.execute , "put 本地文件 遠程文件"
範例:
'初始化Inet控制項
Inet1.Protocol = icFTP
Inet1.URL = "ftp://u0501901.k1.13939.org"
Inet1.RemotePort = 21
Inet1.UserName = "u0501901"
Inet1.Password = "750531179574"
Label3.Caption = "正在上傳....."
'先關閉當前的資料庫存連接
cn.Close
Inet1.Execute , "put" & " " & App.Path & "\vbhelp.mdb" & " " & "/vbhelp/vbhelp.mdb"
Do While Inet1.StillExecuting
DoEvents
Loop
Label3.Caption = "上傳成功"
'重新連接資料庫
dbconnect
2、利用Inet控制項下載文件
格式: inet1.execute , "get 遠程文件 本地文件",注意空格
'初始化INET1控制項
Inet1.Protocol = icFTP
Inet1.URL = "ftp://u0501901.k1.13939.org"
Inet1.RemotePort = 21
Inet1.UserName = "u0501901"
Inet1.Password = "750531179574"
Label3.Caption = "正在下載...."
'格式: inet1.execute , "get 遠程文件 本地文件",注意空格
Inet1.Cancel
Inet1.Execute , "GET /vbhelp/vbhelp.mdb c:\temp\vbhelp.mdb"
Do While Inet1.StillExecuting
DoEvents
Loop
label3.caption="下載成功"
3、利用INET控制項建立遠程的文件夾
Inet1.AccessType = icUseDefault
Inet1.RemotePort = 21
Inet1.Protocol = icFTP
Inet1.URL = "u0711084.k1.13939.org"
Inet1.UserName = "u0711084"
Inet1.Password = "750531179574"
Inet1.Execute , "mkdir vbtest"
Do While Inet1.StillExecuting
DoEvents
Loop
Inet1.Execute , "close"
Inet1.Execute , "quit"
MsgBox "成功建立文件夾"
4、利用INET控制項刪除遠程文件夾
方法跟建立文件夾一樣,刪除命令為rmdir,但只能刪除空目錄,刪除文件用delete
㈢ vb如何上傳文件到指定ftp
最簡單的方法是用ftp批處理,代碼如下
open app.path & "\ftpcmd.ftp" for output as #1 '創建一個ftp命令文件
print #1, "open " & "IP" '打開ftp伺服器
print #1, "user " & "用戶名"
print #1, "pass " & "密碼"
print #1, "lcd " & "本地文件路徑" '指定本地文件所在目錄
print #1, "put " & "文件名"
close #1 'frp命令文件寫完了
shell "ftp -n -s:" & app.path & "\ftpcmd.ftp" '調用系統ftp,並執行上面寫的ftpcmd.ftp
㈣ 如何使用FTP上傳文件
1、下載軟體FileZilla(用的比較多的一款),
㈤ VB做ftp上傳工具
在VB中實現文件上傳
VisualBasic作為一個集應用程序開發、測試、查錯功能於一體的集成式開發環境,越來越受到程序員的青睞。筆者在開發某資料庫維護系統的過程中,選擇了VB5.0作為開發平台,Unix作為伺服器端操作系統,Informix作為伺服器資料庫。
問題的出現
在開發該維護系統的過程中,注意到Informix資料庫的欄位類型CLOB填入數據時需要函數FILETOCLOB("FILENAME","SERVER"),其中的"FILENAME"需要指出文件路徑和文件名稱。然而,在維護過程中此文件是在客戶端執行的,這樣就要求即時將文件傳輸到伺服器端。
解決辦法
1.FTP傳輸工具
我們首先使用FTP傳輸工具,用VB5.0中SHELL命令調用DOS批處理文件來實現傳輸的需要。
Shell調用格式:
Shell(pathname[,windowstyle])
例子:Shell("c:\windows\upload.bat")
批處理文件upload.bat的內容:
c:\windows\ftphostname
username
password
sendc:\zrh\upload.txtupload.txt
bye
該命令實現了文件"upload.txt"的傳輸要求。在使用完畢之後,再調用命令把該文件刪除。
例子:Shell("c:\windows\del_up.bat")
批處理文件del_up.bat的內容:
c:\windows\ftphostname
username
password
deleupload.txt
bye
這樣,文件"upload.txt"被刪除。
但是,另一個問題出現了。由於Shell函數的運行機制是與其它程序同步執行,也就是說,當調用Shell函數的子程序還沒有執行完畢之前,Shell函數後面的語句已經執行。在大批量添加數據的過程中,就會出現某個記錄的文件還沒有傳到,而下一個插入語句(Insert)已經開始調用。這樣,ODBC調用就會出現錯誤。
2.INET控制項
InternetTransfer控制項提供了Internet上最常使用的兩種協議:HTTP和FTP。使用HTTP協議可以連接到WWW伺服器上來下載文件;使用FTP協議則可以登錄到FTP伺服器。一般的FTP命令,例如CD、GET都可以通過Execute方法實現。
下面是一個設置INET控制項屬性的例子。
inet1.URL=ftp://username:password@hostname/document
inet1.Protocol=2-icFTP
inet1.RemoteHost=hostname
inet1.RemotePort=21
inet1.Username=username
inet1.Password=password
執行文件傳輸:
Inet1.Execute"ftp://username:password@hostname",_
"PUT"&local_filename&"UPLOAD1.TXT"
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop
這樣便實現了文件的上載。
*SINET控制項的優點
INET控制項與Shell()函數的不同之處在於INET控制項通過調用語句
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop來控制語句執行的順序。在文件傳輸工作未完成之前,程序不會執行其它語句,自然也就不會出現調用Shell函數所出現的問題。變數right1用來測試inet1的執行狀態,如果進程中仍在進行文件傳輸的工作,則調用過程DoEvents給系統空閑時間來做文件傳輸工作,這樣便成功地執行了文件上載的功能。該文件使用完畢之後將被刪除。
Inet1.Execute"ftp://informix:informix@rd",_
"DELETEUPLOAD1.TXT"
right1=Inet1.StillExecuting
DoWhileright1
right1=Inet1.StillExecuting
DoEvents
Loop
將上載的文件刪除是為了避免佔用伺服器端磁碟空間。
*S利用StateChanged事件提示信息
伺服器在執行inet1.execute的同時也激活了Inet1_StateChanged事件,進程可以根據捕獲到的狀態進行動作。
object_StateChanged(ByValStateAsInteger)
State:整數類型Integer
下面是狀態的說明。
常數值 描述icNone
0 未報告狀態icHostResolvingHost
1 控制項正在尋找指定主機的IP地址icHostResolved
2 控制項已成功找到指定主機的IP地址icConnecting
3 控制項正在與指定主機進行連接icConnected
4 控制項已成功與指定主機連接icRequesting
5 控制項正在向主機發出請求icRequestSent
6 控制項已成功向主機發出請求icReceivingResponse
7 控制項正在從主機接收反饋信息icResponseReceived
8 控制項已成功從主機接受反饋信息icDisconnecting
9 控制項正在與主機斷開icDisconnected
10 控制項已與主機斷開icError
11 在與主機通信的過程中發生了錯誤icResponseCompleted
12 請求結束且數據已經接收到
下面是一個例子。
PrivateSubInet1_StateChanged(ByValStateAsInteger)
'
'methodwhenState=12.Thisexampleassumesthe
'dataistext.
SelectCaseState
'...Othercasesnotshown.
CaseicResponseReceived'12
DimvtDataAsVariant'Datavariable.
DimstrDataAsString:strData=""
DimbDoneAsBoolean:bDone=False
'Getfirstchunk.
vtData=Inet1.GetChunk(1024,icString)
DoWhileNotbDone
strData=Data&vtData
'Getnextchunk.
vtData=Inet1.GetChunk(1024,icString)
IfLen(vtData)=0Then
bDone=True
EndIf
Loop
txtData.Text=strData
EndSelect
EndSub->
㈥ 急!用VB代碼實現FTP的上傳和下載(高分)
要實現在這個代碼太多,在這里發有點不太現實,VB 實現 FTP 用 WinSock 控制項或API。
做該類程序主要是握手控制,即返回值的處理並做相應傳輸,另外就是了解每個 FTP 命令的作用,這樣做個 FTP 服務端或客戶端都不是什麼難事。
㈦ Excel 怎樣用vba實現文件上傳到ftp服務中
VBA訪問FTP進行文件傳輸的,網路上見到3種方式,用過2種。
一、VBA+DOS批處理的方式,本質上還是通過DOS來進行,有點麻煩,而且運行中會彈出CMD窗口,現在已經不用這種方法了。
VBA寫DOS:
OpengetfdForOutputAs#1
Print#1,""
Print#1,"("
Print#1,"echo;openxx.xx.xx.xx"
Print#1,"echo;user"
Print#1,"echo;pwd"
Print#1,"echo;cd""";ftpfdx8;""""
Print#1,"echo;prompt"
Print#1,"echo;dir"
Print#1,"echo;bye"
Print#1,")>""";fdx8;""""
Print#1,
Print#1,"ftp-v-i-s:""";fdx8;"""|find""ftpgroup"">""";folderx8;""""
Print#1,
VBA運行它:
Shell("ftp-v-i-s:"&ftpfile)
二、VBA調用API,具體是basp21.dll
詳見http://www.hi-ho.ne.jp/babaq/eng/basp21f.html,說明很詳細,有實例
示例如下,比較簡單易懂,其中getfile為下載,上傳使用putfile就好了。
PrivateSubForm_Load()
DimftpAsObject,rcAsLong,vAsVariant,v2AsVariant
DimctrAsLong
Setftp=CreateObject("basp21.FTP")
ftp.OpenLog"c: emplog.txt"
rc=ftp.Connect("ftp.microsoft.com","anonymous","")
Ifrc=0Then
v=ftp.GetDir("bussys/winnt/winnt-public",2)
IfIsArray(v)Then
ForEachv2Inv
Debug.Printv2
Next
EndIf
v=ftp.GetDir("bussys/winnt/winnt-public")
IfIsArray(v)Then
ForEachv2Inv
Debug.Printv2
Next
EndIf
rc=ftp.GetFile("bussys/winnt/winnt-public/*","c: emp")
EndIf
End
EndSub
㈧ vb.net ftp上傳文件
Dim OpenFileDialog As New OpenFileDialog
OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
OpenFileDialog.Filter = "文本文件(*.jpg)|*.jpg|所有文件(*.*)|*.*"
If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
Dim FileName As String = OpenFileDialog.FileName
' TODO: 在此處添加打開文件的代碼。
textbox1.Text = FileName
End If
第一個按鈕 上傳
Dim filelast As String = fileaddbefore.Text.Substring(fileaddbefore.Text.LastIndexOf("."), fileaddbefore.Text.Length - fileaddbefore.Text.LastIndexOf("."))
MessageBox.Show(filelast)
My.Computer.Network.UploadFile(textbox1.Text, "ftp://XXX/" & 文件名.Text & filelast, "登錄名1", "登錄密碼", True, 100)
第二個按鈕
㈨ VB把文件夾裡面的所有文件上傳的ftp
VB編寫個程序上傳文件到FTP,可用下面程序:
Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFFFFFF
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Sub Command1_Click()
Dim filename As String
Dim ftp As String
Dim uname As String
Dim upin As String
ftp = InputBox("請輸入伺服器地址")
uname = InputBox("請輸入帳號", , "anonymous")
upin = InputBox("請輸入密碼", , "IE@User")
filename = Timer()
Open filename & ".script" For Output As #1
Print #1, "user"
Print #1, uname
Print #1, upin
Print #1, "pwd"
Print #1, "hash"
Print #1, "put " & filename & ".txt"
Print #1, "quit"
Close #1
Open filename & ".txt" For Output As #1
Print #1, Text1.Text
Print #1, Combo1.Text
Close #1
DoEvents
Dim pId As Long, pHnd As Long
pId = Shell("ftp -n -s:" & filename & ".script" & " " & ftp, vbHide)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
If pHnd <> 0 Then
Call WaitForSingleObject(pHnd, INFINITE)
Call CloseHandle(pHnd)
End If
Kill filename & ".script"
End Sub
為了不重復文件名,取時間為文件名filename,生成filename.script腳本,傳輸FTP用,生成filename.txt保存了combo1和text1的文字,調用ftp命令傳輸,不需要inet或winsock控制項,API是SHELL WAIT功能,因為script腳本保存了帳號和密碼,當傳輸完成後刪除filename.script腳本,如果用inet不如這個簡單,畢竟FTP不是自己寫的,不管PASV與否都正常使用,唯一就是密碼保存要等傳輸完成,FTP是文本傳輸協議,與HTTP不一樣,不能寫POST,實在想那樣,VB做不了,需要手動創建數據包欺騙伺服器。