2013-04-12 4 views
2

원격 FTP 서버에 파일을 업로드하는 응용 프로그램을 코딩하고 있습니다. 이것은 이미 작동하는 내 코드입니다.FTP 업로드 VB.net의 ProgressBar

clsrequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 

Dim bFile() As Byte = System.IO.File.ReadAllBytes(rutaorigen) 

Dim clsStream As System.IO.Stream = clsrequest.GetRequestStream() 

clsStream.Write(bFile, 0, bFile.Length) 

clsStream.Close() 
clsStream.Dispose() 

이제 진도를 VB.NET에서 ProgressBar으로 보여주고 싶습니다.

파일 크기가 너무 크지 않습니다 (최대 10MB).

이미 여기에서 찾은 예제를 시도했지만 작동하지 않았습니다.

도와 주시면 감사하겠습니다. 감사!

+0

당신이 시도 않았다 어떤 예, 그리고 왜 작동하지 않았다 ? – LarsTech

+0

그것은 유튜브에서 나왔다. http://www.youtube.com/watch?v=GUyEHiJTkRg 그것은 정확히 내가하고 싶은 것 같지만 정확하지 않다. –

답변

-1

나는 오래 전 예에서 이것을 얻었다. 코드는 사용자의 필요에 따라 쉽게 변경 될 수 있어야합니다. 콘솔

Dim clsRequest As System.Net.FtpWebRequest = _ 
     DirectCast(System.Net.WebRequest.Create(ServLabel.Text & TextBox1.Text), System.Net.FtpWebRequest) 

    clsRequest.Credentials = New System.Net.NetworkCredential(PassLabel.Text, UserLabel.Text) 
    clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 
    rfshTMR.Enabled = True 
    Dim File() As Byte = System.IO.File.ReadAllBytes(txtFile.Text) 
    Dim clsStream As System.IO.Stream = _ 
     clsRequest.GetRequestStream() 
    clsStream.Write(File, 0, File.Length) 
    For offset As Integer = 0 To File.Length Step 1024 
     ToolStripProgressBar1.Value = CType(offset * ToolStripProgressBar1.Maximum/File.Length, Integer) 
     Dim chunkSize As Integer = File.Length - offset - 1 
     If chunkSize > 1024 Then chunkSize = 1024 
     clsStream.Write(File, offset, chunkSize) 
     ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum 
    Next 
    clsStream.Close() 
    clsStream.Dispose() 
    MsgBox("File Is Now In Database", MsgBoxStyle.OkOnly, "Upload Complete") 
+0

안녕 얘들 아, 아직도 할 수있다. 멀티 스레딩을 구현해야합니까? 감사합니다 –

+0

이 코드는 나를 위해, 확실한 오류가 있는지 확인하십시오. 그리고 예 멀티 스레딩은 좋은 생각입니다. – Kraxed

+0

왜'ToolStripProgressBar1.Value = ToolStripProgressBar1.Maximum'이 루프 안에 있습니까? 내 생각에 그것이 루프 외부와 루프 이후에 있어야한다고 생각합니다. – SysDragon

0

간단한 진행 :

Dim request As WebRequest = WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip") 
request.Credentials = New NetworkCredential("username", "password") 
request.Method = WebRequestMethods.Ftp.UploadFile 

Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"), 
     ftpStream As Stream = request.GetRequestStream() 
    Dim buffer As Byte() = New Byte(10240 - 1) {} 
    Dim read As Integer 
    Do 
     read = fileStream.Read(buffer, 0, buffer.Length) 
     If read > 0 Then 
      ftpStream.Write(buffer, 0, read) 
      Console.WriteLine("Uploaded {0} bytes", fileStream.Position) 
     End If 
    Loop While read > 0 
End Using 

윈폼 GUI 진행 :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    ' Run Upload on background thread 
    Task.Run((Sub() Upload())) 
End Sub 

Sub Upload() 
    Dim request As WebRequest = 
     WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip") 
    request.Credentials = New NetworkCredential("username", "password") 
    request.Method = WebRequestMethods.Ftp.UploadFile 

    Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"), 
      ftpStream As Stream = request.GetRequestStream() 
     ProgressBar1.Invoke(Sub() ProgressBar1.Maximum = fileStream.Length) 
     Dim buffer As Byte() = New Byte(10240 - 1) {} 
     Dim read As Integer 
     Do 
      read = fileStream.Read(buffer, 0, buffer.Length) 
      If read > 0 Then 
       ftpStream.Write(buffer, 0, read) 
       ProgressBar1.Invoke(Sub() ProgressBar1.Value = fileStream.Position) 
      End If 
     Loop While read > 0 
    End Using 
End Sub 

enter image description here