Самый простой способ
Самый простой способ загрузить файл на 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);
}
}
Информацию о прогрессе графического интерфейса (WinForms ProgressBar
) см. В примере C # по адресу:
Как показать индикатор выполнения для загрузки с помощью FtpWebRequest
Папка загрузки
Если вы хотите загрузить все файлы из папки, см.
Раздел Загрузка каталога файлов на FTP-сервер с помощью WebClient .
Информацию о рекурсивной загрузке см. В разделе
Рекурсивная загрузка на FTP-сервер в C #.