Wie können wir zeigen Fortschrittsbalken für den upload mit FtpWebRequest
Ich bin das hochladen von Dateien auf den ftp mit FtpWebRequest
. Ich brauche, um den status anzuzeigen, wie viel getan wird.
Bisher mein code ist:
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();
}
InformationsquelleAutor Afnan Bashir | 2011-06-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg ist die Verwendung
BackgroundWorker
und setzen Sie Ihren code inDoWork
event-handler. Fortschritte mitBackgroundWorker.ReportProgress
.Die Grundidee:
Stellen Sie sicher
WorkerReportsProgress
aktiviert istMit
BackgroundWorker
können Sie auch leicht umsetzen, hochladen Stornierung.Bashir - passen Sie die Puffergröße, um Ihre Bedürfnisse.
Super!!! Aber sollten Sie nicht in der Nähe
inputStream
undoutputStream
auch?wird sich darum kümmern
Aza Gut zu wissen, danke! (Ich bin C# Neuling, natürlich)
InformationsquelleAutor Alex Aza
Einem trivialen Beispiel der FTP-upload mit
FtpWebRequest
mit WinForms Fortschrittsbalken mitTask
Klasse:Dem core-upload-code basiert auf:
Upload-und download binäre Datei auf/vom FTP-server in C#/.NET
InformationsquelleAutor Martin Prikryl
Sehen BackgroundWorker, ermöglicht es Ihnen, führen Sie eine zeitraubende Aufgabe, während der GUI noch reagiert und bietet auch Fortschritte/Stornierung.
InformationsquelleAutor Guillaume
Einer kündbar Ansatz mit dem async/await-Muster ist IProgress-Schnittstelle nutzen overlapped I/O, wenn verfügbar. Finden Sie KB156932 um festzustellen, ob Ihr Szenario qualifiziert. Die Kündigung token aktiviert ist, bevor Sie das öffnen des streams, aber ansonsten ausgelagert wird, um die streams' async-Methoden, während die Datei übertragen wird.
Habe ich sehr wenig gemacht benchmarking, aber vermute, das ist nur praktisch, wenn das senden von großen Dateien. Die Leistung mit overlapped I/O kann sich verschlechtern, mit kleineren Dateien, und vor allem kleinere puffergrößen.
InformationsquelleAutor RMart