vb通过inet控件实现FTP文件上传

来自:http://hi.baidu.com/jiangdbna/item/b8177de997933b275a7cfb1e


Private Sub YdFileUp(sUpfile As String)
'sUpfile 上传文件名
On Error GoTo End_Sjsb
Dim rsFtp As Recordset
Dim LocalFile As String
Dim WebFile As String
Dim LtFtp_Ip As String 'FTP IP地址
Dim LtFtp_Port As String 'FTP端口
Dim LtFtp_User As String'FTP用户名
Dim LtFtp_Pass As String 'FTP用户密码
Dim bUnload As Boolean
TsFTP = True
XfUpok = False

With InetClient 'InetClient为Inet控件
     .AccessType = icUseDefault
     .URL = "" & Trim(LtFtp_Ip) & "'"
     .Protocol = icFTP
     .RemoteHost = Trim(LtFtp_Ip)
     .RemotePort = Val(LtFtp_Port)
     .UserName = Trim(LtFtp_User)
     .Password = Trim(LtFtp_Pass)
End With
LocalFile = "D:\GPS_Data\BusData\outputFile\" & sUpfile '文件绝对路径

If XfUpok = False Then
   InetClient.Execute , "DELETE " & sUpfile
   Do While InetClient.StillExecuting
      DoEvents
   Loop
   For iCount = 0 To 1000
       For rCount = 0 To 500
           DoEvents
      Next rCount
   Next iCount
   If Dir(LocalFile) <> Space(0) Then '加载文件,如果文件存在
      InetClient.Execute , "SEND " & LocalFile & "  " & sUpfile '上传文件
      Do While InetClient.StillExecuting
         DoEvents
      Loop
         'Kill LocalFile ’删除本地文件
   Else
      'MsgBox "没有找到相应的文件,请重试!"
   Exit Sub
   End If
End If
If XfUpok = True Then
   XfUpok = False
End If
For iCount = 0 To 1000
    For rCount = 0 To 100
        DoEvents
        If bUnload = True Then Exit Sub
    Next rCount
Next iCount
InetClient.Execute , "CLOSE"
If TsFTP = True Then
   ‘Wdbsf.Execute "UpDate Wd_Output Set Bz='已上传',ScRQ='" & Format(Date, "yyyy-MM-dd") & "',ScSJ='" & Format(Time, "HH:mm:ss") & "' where FileName='" & sUpfile & "'", dbFailOnError ’上传完后执行次更新操作
   If Dir(LocalFile) <> Space(0) Then Kill LocalFile'上传完后删除本地文件
      MsgBox sUpfile & "文件上传成功!", vbOKOnly + vbInformation, "<提示信息>"
Else
        MsgBox sUpfile & "文件上传失败.", vbCritical + vbOKOnly, "<提示信息>"
End If
Exit Sub
End_Sjsb:
    If AutoSj = 1 Then
        If Err.Number = 35764 Then
           If MsgBox("上次请求未完成,要继续等待吗?", 4 + 32, "<提示信息>") <> vbYes Then GoTo End_1
        ElseIf Err.Number = 35761 Then
           If MsgBox("网络连接超时,要重新连接吗?", 4 + 32, "<提示信息>") <> vbYes Then GoTo End_1
        ElseIf Err.Number = 35754 Then
           If MsgBox("无法连接到服务中心,要重试吗?", 4 + 32, "<提示信息>") <> vbYes Then GoTo End_1
        Else
           MsgBox "无法连接到服务中心服务器!", vbCritical + vbOKOnly, "<提示信息>"
           GoTo End_1
        End If
    Else
        If Err.Number = 35761 Then

  MsgBox Date & Space(2) & Time & "  网络连接超时", vbCritical + vbOKOnly, "<提示信息>"
        ElseIf Err.Number = 35754 Then

MsgBox Date & Space(2) & Time & "  无法连接到服务中心", vbCritical + vbOKOnly, "<提示信息>"
        Else

MsgBox Date & Space(2) & Time & "  文件上传失败", vbCritical + vbOKOnly, "<提示信息>"
           GoTo End_1
        End If
    End If
    Exit Sub
End_1:
    Screen.MousePointer = 0
     MsgBox "文件上传出错!错误编号:" & Err.Number & "描述:" & Err.Description, vbCritical + vbOKOnly, "<提示信息>"
End Sub

Private Sub InetClient_StateChanged(ByVal State As Integer)‘Inet控件的StateChanged监听事件
Dim MessStr As String
Select Case State
       Case 0
            MessStr = "没有状态可报告!"
       Case 1
            MessStr = "正在查询所指定的主机IP地址!"
       Case 2
            MessStr = "已成功找到所指定的主机的IP地址!"
       Case 3
            MessStr = "正在与主机连接..."
       Case 4
            MessStr = "  已与主机连接成功,请稍后...   "
       Case 5
            MessStr = "正在向主机发送请求..."
       Case 6
            MessStr = "发送请求已成功..."
            MessStr = "正在传输数据记录,请稍候 ... "
       Case 7
            MessStr = "正在接收主机的响应..."
       Case 8
            MessStr = "已成功接收到主机的响应..."
       Case 9
            MessStr = "正在解除与主机的连接..."
       Case 10
            MessStr = "已成功地与主机解除了连接..."
       Case 11
            MessStr = "与主机通讯时出现了错误..."
            MessStr = "Unconnected"
            MessStr = "与主机通讯时出现了错误..."
            UXfsjSb = False
       Case 12
           TsFTP = True
       
            For iCount = 0 To 1000
                For rCount = 0 To 1000
                    DoEvents
                Next rCount
            Next iCount
            Dim vtData As Variant '数据变量。
            '取得第一块。
            strData = Space(0)
            vtData = InetClient.GetChunk(1024, icString) 'icString   'icByteArray
            DoEvents
            Do While Not bDone
               strData = strData & Trim(vtData)
               DoEvents
               vtData = InetClient.GetChunk(1024, icString) 'icString   'icByteArray
               If Len(vtData) = 0 Then
                  bDone = True
               End If
            Loop
            strData = strData & Trim(vtData)
            If sDownStep = 1 Then
               sDownFileName = Trim(strData)
            ElseIf sDownStep = 3 Or sDownStep = 4 Then
               XfUpok = True
            ElseIf sDownStep = 6 Then
               sDownFileName = Trim(strData)
               For sCount = 0 To 20
                   sDownFileCount = Len(sDownFileName)
                   If sDownFileStrr(sCount) = Space(0) And sDownFileCount > 16 Then
                      sDownFileStrr(sCount) = Mid(sDownFileName, 1, 16)
                      sDownFileName = Right(sDownFileName, sDownFileCount - 18)
                   End If
               Next
            ElseIf sDownStep = 8 Then
               MessStr = "所有文件交换任务完成 !"
            End If
            
End Select
End Sub


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值