最近在做vb时,用inet控件上传服务器文件,但是有时候服务器那边是没有接收到发送信号的
服务器用的是tomcat
我想在上传文件时获取一个信号,判断是否跟服务器连接成功,上传成功
刚入vb,请大家帮忙,谢谢!!!
Sub INet_Upload(ByVal strFilePath As String, ByVal strURL As String)
 
    Dim pos As Integer
    Dim fn As Integer
    Dim sData As String
    Dim sboundary As String
    Dim szcommand As String
    Dim srequestHeaders As String
    Dim ssend As String
 
On Error GoTo ErrorHandler:
 
    '将文件内容读到sData中
 
    pos = 0
    fn = FreeFile()
    Open strFilePath For Binary Access Read Lock Read As fn
    sData = Space(LOF(fn))
    Get #fn, , sData
    Close fn
 
 
    '设置HTTPRequest中的分隔符
    sboundary = "-----------------------------7d9242113f0490"
 
    '设置HTTPReqeust中的Data
    szcommand = "--" & sboundary & vbCrLf & "Content-Disposition: form-data; name=" & Chr(34) & "filename" & Chr(34) & "; filename=" & Chr(34) & strFilePath & Chr(34) & vbCrLf & "Content-Type: text/plain" & vbCrLf & vbCrLf & sData & vbCrLf & "--" & sboundary & "--"
 
    '设置HTTPRequest中的Header
    srequestHeaders = "Content-Type: multipart/form-data; boundary=" & sboundary & vbCrLf & "Content-Length: " & CStr(LenB(szcommand)) & vbCrLf
 
    '设置协议
    Form1.Inet1.Protocol = icHTTP
    'Dim vaExecute As Variant
    'vaExecute = Form1.Inet1.StillExecuting
    '设置访问路径
    Form1.Inet1.URL = strURL
    
    log "开始上传文件:" & strFilePath & " 至 " & strURL
    
    Form1.Inet1.Execute Form1.Inet1.URL, "POST", szcommand, srequestHeaders    Do While Form1.Inet1.StillExecuting
        DoEvents
    Loop
    
    
    Exit Sub
    
ErrorHandler:
 
    log "INet_Upload发生错误:" & Err.Description
 
End Sub
我怎么才能知道是否上传成功,
服务器的log
2009-11-05 17:29:17:Successfully read configuration
2009-11-05 17:29:17:Post request from ************
2009-11-05 17:29:17:fileName: filename
2009-11-05 17:29:17:fileItem: C:\Program Files\Output\sectre03.txt(客户端的文件地址,作为头上传的)
2009-11-05 17:29:17:Successfully Save sectre03.txt To /app/hiportfolio/tmp/upload当连续调用这个函数时,有时候这段信息是没有的,最后没办法我只能在调用一次后让程序sleep 5秒。但是我感觉这不是解决问题,当客户端电脑有点其他问题时,又会出现上传不了的情况。
我现在就想怎么能在客户端判断是否上传成功。
请帮忙,多谢了!!!

解决方案 »

  1.   

    '参考这段:Private Sub Inet1_StateChanged(ByVal State As Integer)
        labInetState.Caption = State
        labInetState.Refresh
        Dim get_data As String
        
        Dim temp As String
        Select Case State
            Case icNone              '0无状态可报告
            
            Case icResolvingHost     '1该控件正在查询所指定的主机的IP地址
                temp = "正在查找..."
            Case icHostResolved      '2该控件已找到指定主机的IP地址
                temp = "已找到IP地址"
            Case icConnecting        '3该控件正在与主机连接
                temp = "正在与主机连接..."
            Case icConnected         '4该控件已与主机连接成功
                temp = "连接成功"
            Case icRequesting        '5该控件正在向主机发送请求
                temp = "正在发送请求..."
            Case icRequestSent       '6该控件发送请求已成功
                temp = "发送请求成功"
            Case icReceivingResponse '7该控件正在接收主机的响应
                temp = "正在接收主机的响应"
            Case icResponseReceived  '8该控件已成功接收主机的响应
                temp = "已接收主机的响应"
            Case icDisconnecting     '9该控件正在解除与主机的连接
                temp = "正在解除与主机的连接..."
            Case icDisconnected      '10该控件已解除与主机的连接
                temp = "已解除与主机的连接"
            Case icError             '11与主机通讯时出现错误
                temp = Inet1.ResponseCode & Inet1.ResponseInfo
            Case icResponseCompleted '12该请求已经完成,并且所有数据已经接收到
                temp = "已接收到数据"
        End Select
        labInetState1.Caption = temp
        labInetState1.Refresh
    end sub
      

  2.   

    inet是看不出的,下个免费的ftp ocx,我用chiltal ftp。
      

  3.   

    为什么我写的Inet1_StateChanged函数没有被触发!
    Private Sub Inet1_StateChanged(ByVal State As Integer)
       
         Dim get_data As String
       
        ' Do Until Inet1.StillExecuting = False
        '
        ' Loop
       
         If State = 12 Then
            get_data = Inet1.GetChunk(1024)
            log get_data
         End If
        End Sub请帮我看下啊,谢谢各位了!!!