Найпростіший спосіб
Найбільш тривіальний спосіб завантаження файлу на FTP-сервер за допомогою .NET Framework - це WebClient.UploadFile
метод :
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");
Розширені опції
Якщо вам потрібен більший контроль, який WebClient
не пропонує (наприклад, TLS / SSL шифрування , режим ASCII, активний режим тощо), використовуйте FtpWebRequest
. Простий спосіб - просто скопіювати FileStream
потік FTP за допомогою 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);
}
Моніторинг прогресу
Якщо вам потрібно стежити за ходом завантаження, вам доведеться самостійно скопіювати вміст:
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);
}
}
Для прогресу GUI (WinForms ProgressBar
) див. Приклад C # за адресою:
Як ми можемо показати панель прогресу для завантаження за допомогою FtpWebRequest
Завантаження папки
Якщо ви хочете завантажити всі файли з папки, див.
Розділ Завантажити каталог файлів на FTP-сервер за допомогою WebClient .
Для рекурсивного завантаження див.
Рекурсивне завантаження на FTP-сервер у C #