Najprostszy sposób
Najprostszym sposobem przesłania pliku na serwer FTP przy użyciu platformy .NET jest użycie WebClient.UploadFile
metody :
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");
Zaawansowane opcje
Jeśli potrzebujesz większej kontroli, której WebClient
nie oferuje (jak szyfrowanie TLS / SSL , tryb ASCII, tryb aktywny itp.), Użyj FtpWebRequest
. Prostym sposobem jest po prostu skopiowanie FileStream
do strumienia FTP za pomocą Stream.CopyTo
:
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())
{
fileStream.CopyTo(ftpStream);
}
Monitorowanie postępów
Jeśli chcesz monitorować postęp przesyłania, musisz samodzielnie skopiować zawartość fragmentami:
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())
{
byte[] buffer = new byte[10240];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, read);
Console.WriteLine("Uploaded {0} bytes", fileStream.Position);
}
}
Aby uzyskać postęp w interfejsie GUI (WinForms ProgressBar
), zobacz przykład w języku C # pod adresem:
How can we show progress bar for upload with FtpWebRequest
Przesyłanie folderu
Jeśli chcesz przesłać wszystkie pliki z folderu, zobacz
Przesyłanie katalogu plików na serwer FTP za pomocą WebClient .
W przypadku przekazywania cyklicznego zobacz przekazywanie cykliczne
na serwer FTP w języku C #