none
上传图片时的进度条 RRS feed

  • 问题

  • 我想有一种在上传大文件图片时,有一个准确计算上传速度,大小的功能,并有对应的进度条显示,最好有一个实例,因为我已找了很多次了,一直找不到,希望能一个完整的实例.谢谢大家.

    2009年5月11日 9:45

答案

全部回复

  • 你好!
          你可以这样计算:
         估计速率 = 已发送字节数/已使用时间
         剩余时间 = 剩余字节数/估计速率
         目前进度 = 已发送字节数/总字节数
    周雪峰
    2009年5月11日 11:52
    版主
  • 我写了一篇使用flash上传文件的文章,可以参考下. 带进度条的。
    http://www.cnblogs.com/beniao/archive/2009/01/18/1377668.html
    Beniao
    2009年5月12日 3:43
  • 看下这个例子:

    Imports System.Net
    Imports System.IO
    Imports System.Text
    Imports System.Threading
    Public Class Form2
        Dim myThreadDelegate As New ThreadStart(AddressOf filldata)
        Protected Delegate Sub Updatedelegate(ByVal progress As Integer)
        Public Sub filldata()
            Dim request As FtpWebRequest = CType(WebRequest.Create("ftp://localhost/del_test.txt"), FtpWebRequest)
            request.Method = WebRequestMethods.Ftp.UploadFile
            Dim sourceStream As New StreamReader("c:\del_test.txt")
            Dim fileContents As Byte() = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd())
            sourceStream.Close()
            request.ContentLength = fileContents.Length
            Try
                Dim flags As Boolean = True
                Dim currentposition As Long = 0
                Dim len As Integer = 0
                Dim requestStream As Stream = request.GetRequestStream()
                Do While (flags)
                    If ((fileContents.Length - currentposition) > 200) Then
                        len = 200
                    Else
                        len = fileContents.Length - currentposition
                    End If
                    requestStream.Write(fileContents, currentposition, len)
                    currentposition = currentposition + len
                    Me.Invoke(New Updatedelegate(AddressOf updatedisplay), New Object() {CType((currentposition * 100 / fileContents.Length), Integer)})
                    If (currentposition >= fileContents.Length) Then
                        flags = False
                    End If
                Loop
                requestStream.Close()
                Dim response As FtpWebResponse = CType(request.GetResponse(), FtpWebResponse)
                Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription)
                response.Close()
            Catch ex As Exception
                Console.WriteLine(ex.Message + ex.StackTrace.ToString)
            End Try
        End Sub
        Public Sub updatedisplay(ByVal progress As Integer)
            Me.ProgressBar1.Value = progress
            If (progress = 100) Then
                MessageBox.Show("upload file complete")
            End If
            Me.ProgressBar1.Invalidate()
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myThread As New Thread(myThreadDelegate)
            myThread.Start()
        End Sub
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.ProgressBar1.Maximum = 100
            Me.ProgressBar1.Minimum = 0
            Me.ProgressBar1.Value = 0
        End Sub
    End Class

    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年5月13日 3:02
    版主
  • 先说清楚是在Webform下显示还是在Winform下显示
    【孟子E章】
    2009年5月13日 5:18
    版主
  • 先说清楚是在Webform下显示还是在Winform下显示
    【孟子E章】

    感谢所有对我问题的关注朋友,我试下MSFT, 版主的代码,

    我是在WEB页面中体现进度条效果.
    2009年5月13日 11:03
  • 51aspx大文件上传并显示进度和上传速率示例及组建源码

    http://www.51aspx.com/CV/LargeFileUpload/


    Webform和Winform的做法是完全不同的,所以,提问问题请先讲清楚。
    【孟子E章】
    2009年5月13日 13:25
    版主