zoukankan      html  css  js  c++  java
  • VB开发的上传实例,实现上传进度

    以下是代码部分,采用Inet控件实现上传,实现进度显示和上传更名,比较遗憾的是由于先做的EXE版的,然后再改为了控件版,其中又修改了一些小地方,所以没有写完整的注释,不过在前面的一篇文章中已经将关键部分的代码都注释过了,所以下面这些部分应该是很容易看懂的。

    在网上看过很多资料,关于VB实现上传的,其中很少提到上传进度的问题,大多是下载进度。问过一些朋友,据说用WINSOCK做上传进度要好些INET因为封装后留出来的灵活的方法不多,所以很少有人用他来做上传,更别说上传进度的问题了。

    但是我工作中所需要的功能相当简单,唯一需要的就是加一个上传进度显示的东西,以免用户在上传非常大的文件的时候无法判断当前状态。

    在代码中 inet1 是作为执行上传的inet实例,而 inet2就是作为检查上传进度的inet实例。

    通过使用一个TIMER 每隔1秒 inet2执行一次 size命令,获得正在上传的这个文件在服务器上的当前文件大小。

    就这样简单的实现了上传进度的显示。

    当然,如果当用户和服务器通信速度很慢的时候,1秒内获取文件当前大小并计算显示出来可能不太理想,可以根据实际情况调整TIMER的执行频率。

    '''''''''''''''''''''''''''''''''''''''''
    '周飞 2007-9-25
    '''''''''''''''''''''''''''''''''''''''''

    Public serfilename As String
    Public URL As String
    Public UserName As String
    Public UserPassword As String
    Public filesize As Double


    Private Sub UserControl_Initialize()

        URL = "ftp://192.168.1.17"
        UserName = "Anonymous"
        UserPassword = ""
       
        Inet1.URL = URL
        Inet1.UserName = UserName
        Inet1.Password = UserPassword
        Inet1.Protocol = icFTP
           
        Inet2.URL = URL
        Inet2.UserName = UserName
        Inet2.Password = UserPassword
        Inet2.Protocol = icFTP
       
    End Sub

    Private Sub Cancel_Click()
        
        Inet1.Cancel
               
        Upload.Visible = True
       
        Cancel.Visible = False
           
    End Sub

    Private Sub Findfile_Click()

        CommonDialog1.ShowOpen
           
        txtfile.Text = CommonDialog1.FileName
       
        If txtfile.Text <> "" Then
       
        filesize = FileLen(txtfile.Text)
       
        Else
       
        txtfile.Text = "请先浏览文件"
       
        End If
       
        'MsgBox filesize

    End Sub

    Private Sub Inet2_StateChanged(ByVal State As Integer)
       
        If State = 12 Then
       
            Dim i As Integer
           
            i = CInt((CDbl(Inet2.GetChunk(1024, icString)) / filesize) * 100)
       
            txtData.Caption = CStr(i) + "%"
           
            process.Width = i * 50
           
        End If
       
        If txtData.Caption = "100%" Then
       
            MsgBox "上传完成!"
       
            serfilename = ""
       
        End If
       
           
    End Sub

    Private Sub Timer_Timer()
       
        If serfilename <> "" Then
       
        Inet2.Execute URL, "size " & serfilename
       
        Do While Inet2.StillExecuting
       
        DoEvents
       
        Loop
       
        End If
       
    End Sub

    Private Sub Upload_Click()

        If txtfile.Text = "请先浏览文件" Then

           MsgBox "请先选择文件"
       
        Else
           
            Upload.Visible = False
           
            Cancel.Visible = True
           

            DoUpLoad ("""" + txtfile.Text + """")
                     
        End If
       
    End Sub

    Private Sub DoUpLoad(ByVal filestr As String)

        txtData.Caption = ""
     
        Dim isRight As Boolean
       
        Dim savefile As String
       
        savefile = Mid(filestr, InStrRev(filestr, "/") + 1, Len(filestr))
       
        savefile = CStr(Year(Now)) + CStr(Month(Now)) + CStr(Day(Now)) + CStr(Hour(Now)) + CStr(Minute(Now)) + CStr(Second(Now)) + "_" + Replace(savefile, " ", "")

        serfilename = savefile
      
       
        Inet1.Execute URL, "PUT " & filestr & " " & savefile
       
        isRight = Inet1.StillExecuting
       
       
        Do While isRight
       
        isRight = Inet1.StillExecuting
        DoEvents
       
        Loop

    End Sub


    Private Sub Inet1_StateChanged(ByVal State As Integer)

          '显示当前执行状态
          'txtData.Caption = ShowInfo(State)
         
          If State = 12 Then
                  
            Upload.Visible = True
           
            Cancel.Visible = False
                   
            txtfile.Text = "请先选择文件"
                                           
          End If
         
         
         
    End Sub

    Private Function ShowInfo(ByVal i As Integer) As String

    Select Case i

        Case 0
            ShowInfo = "未报告状态"
        Case 1
            ShowInfo = "正在寻找指定主机的IP地址"
        Case 2
            ShowInfo = "已成功找到指定主机的IP地址"
        Case 3
            ShowInfo = "正在与指定主机进行连接"
        Case 4
            ShowInfo = "已成功与指定主机连接"
        Case 5
            ShowInfo = "正在向主机发出请求"
        Case 6
            ShowInfo = "已成功向主机发出请求"
        Case 7
            ShowInfo = "正在从主机接收反馈信息"
        Case 8
            ShowInfo = "已成功从主机接受反馈信息"
        Case 9
            ShowInfo = "正在与主机断开"
        Case 10
            ShowInfo = "已与主机断开"
        Case 11
            ShowInfo = "在与主机通信的过程中发生了错误"
        Case 12
            ShowInfo = "100%请求结束且数据已经接收到,上传成功"
           
    End Select

    End Function

  • 相关阅读:
    349元我们应该有什么样的期待原道N12豪华版 RK2906入手初体验
    漫谈国内智能手机市场现状
    将AltiumDesigner(Protel升级版)的PCB设计打造成利器——订制应用、操作、过滤表达式及其他一些微操作
    modelsim se 10.1a 下载与破解
    shell配置,选择,环境变量修改(ORACLE_HOME,ORACLE_SID),无法使用sqlplus
    /ibm/fan
    TrackPoint_configure_ThinkPad_squeeze(0616.2011)
    来个狠的
    JDBC for MSSql2005 简单示例
    oracle使用指南
  • 原文地址:https://www.cnblogs.com/ZetaChow/p/2237371.html
Copyright © 2011-2022 走看看