Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can we show progress bar for upload with FtpWebRequest

I am uploading files to ftp using FtpWebRequest. I need to show the status that how much is 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(); } 
like image 633
Afnan Bashir Avatar asked Jun 14 '11 08:06

Afnan Bashir


People also ask

How show upload progress bar in asp net?

To do that, Open Visual Studio -> New Project -> A new dialog window will appear -> In left pane select C# ->select Web -> Select "ASP.NET MVC 4 Application" name your project and click ok. In this article we are going to learn how to implement jquery progress bar in File Upload control in ASP MVC.


1 Answers

The easiest is to use BackgroundWorker and put your code into DoWork event handler. And report progress with BackgroundWorker.ReportProgress.

The basic 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 is enabled

backgroundWorker2.WorkerReportsProgress = true; 

With BackgroundWorker you can also easily implement upload cancellation.

like image 88
Alex Aza Avatar answered Oct 20 '22 08:10

Alex Aza