我们如何显示使用FtpWebRequest上传的进度条

我正在使用将文件上传到ftp FtpWebRequest。我需要表明完成了多少工作。

到目前为止,我的代码是:

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();

}

回答:

最简单的方法是使用BackgroundWorker代码并将其放入DoWork事件处理程序。并报告进度BackgroundWorker.ReportProgress

基本思路:

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;

}

确保WorkerReportsProgress已启用

backgroundWorker2.WorkerReportsProgress = true;

有了BackgroundWorker您,您也可以轻松实现上传取消。

以上是 我们如何显示使用FtpWebRequest上传的进度条 的全部内容, 来源链接: utcz.com/qa/406285.html

回到顶部