How can we show the progress bar to load using FtpWebRequest

I upload files to ftp using FtpWebRequest . I need to show the status of how much has been done.

So far my code is:

 public void Upload(string filename, string url) { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + url + "/" + fileInf.Name; FtpWebRequest reqFTP; //string uri = "ftp://" + Host + "/public_html/testing/blogtest/" + fileInf.Name; // Create FtpWebRequest object from the Uri provided reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // Provide the WebPermission Credintials reqFTP.Credentials = new NetworkCredential(Username, Password); // By default KeepAlive is true, where the control connection is not closed // after a command is executed. reqFTP.KeepAlive = false; //reqFTP.UsePassive = true; // Specify the command to be executed. reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // Specify the data transfer type. reqFTP.UseBinary = true; // Notify the server about the size of the uploaded file reqFTP.ContentLength = fileInf.Length; // The buffer size is set to 2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // Opens a file stream (System.IO.FileStream) to read the file to be uploaded FileStream fs = fileInf.OpenRead(); // Stream to which the file to be upload is written Stream strm = reqFTP.GetRequestStream(); // Read from the file stream 2kb at a time contentLen = fs.Read(buff, 0, buffLength); // Till Stream content ends while (contentLen != 0) { // Write Content from the file stream to the FTP Upload Stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // Close the file stream and the Request Stream strm.Close(); fs.Close(); } 
+22
c # progress-bar winforms ftp ftpwebrequest
Jun 14 2018-11-11T00:
source share
3 answers

The easiest way is to use BackgroundWorker and put your code in a DoWork event DoWork . And report your progress with BackgroundWorker.ReportProgress .

Main idea:

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com"); ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; using (var inputStream = File.OpenRead(fileName)) using (var outputStream = ftpWebRequest.GetRequestStream()) { var buffer = new byte[1024 * 1024]; int totalReadBytesCount = 0; int readBytesCount; while ((readBytesCount = inputStream.Read(buffer, 0, buffer.Length)) > 0) { outputStream.Write(buffer, 0, readBytesCount); totalReadBytesCount += readBytesCount; var progress = totalReadBytesCount * 100.0 / inputStream.Length; backgroundWorker1.ReportProgress((int)progress); } } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar.Value = e.ProgressPercentage; } 

Make sure WorkerReportsProgress enabled

 backgroundWorker2.WorkerReportsProgress = true; 

With BackgroundWorker you can also easily implement download cancellation.

+34
Jun 14 '11 at 8:40
source share

A trivial FTP upload example using FtpWebRequest with a WinForms progress bar using the Task class :

 private void button1_Click(object sender, EventArgs e) { // Run Upload on background thread Task.Run(() => Upload()); } private void Upload() { FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip"); request.Credentials = new NetworkCredential("username", "password"); request.Method = WebRequestMethods.Ftp.UploadFile; using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip")) using (Stream ftpStream = request.GetRequestStream()) { progressBar1.Invoke( (MethodInvoker)delegate { progressBar1.Maximum = (int)fileStream.Length; }); byte[] buffer = new byte[10240]; int read; while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) { ftpStream.Write(buffer, 0, read); progressBar1.Invoke( (MethodInvoker)delegate { progressBar1.Value = (int)fileStream.Position; }); } } } 

enter image description here

The main download code is based on:
Download and upload the binary to / from an FTP server in C # /. NET

+1
Aug 29 '17 at 6:19 on 06:19
source share

See BackgroundWorker , it allows you to run a time-consuming task while the GUI is still responsive, and also provides progress / cancellation.

0
Jun 14 '11 at 8:40
source share



All Articles