Протокол FTP

FtpWebRequest и FtpWebResponse

Последнее обновление: 31.10.2022

Начиная с версии .NET 6 microsoft НЕ рекомендует использовать данный API для работы с FTP и при необходимости для работы с FTP рекомендует обращаться к сторонним библиотекам.

Протокол FTP (File Transfer Protocol) предназначен для передачи файлов по сети. Он работает поверх протокола TCP и использует 21 порт. Однако так как это довольно используемый протокол, и чтобы разработчикам не приходилось с нуля создавать весь функционал, используя TCP-сокеты, в библиотеке классов .NET уже есть готовые решения. Эти решения представляют классы FtpWebRequest и FtpWebResponse. Эти классы являются производными от WebRequest и WebResponse и позволяют отправлять запрос к FTP-серверу и получать от него ответ.

FtpWebRequest позволяет отправить запрос к серверу. Для настройки запроса мы можем использовать следующие его свойства:

  • Credentials: задает или возвращает аутентификационные данные пользователя

  • EnableSsl: указывает, надо ли использовать ssl-соединение

  • Method: задает команду протокола FTP, которая будет использоваться в запросе

  • UsePassive: при значении true устанавливает пассивный режим запроса к серверу

  • UseBinary: указывает тип данных, которые будут использоваться в запросе. Значение true указывает, что передаваемые данные являются двоичными, а значение false - что данные будут представлять текст. Значение по умолчанию — true

Например, загрузим текстовый файл с фтп-сервера:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace FtpConsoleClient
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создаем объект FtpWebRequest
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/test.txt");
            // устанавливаем метод на загрузку файлов
            request.Method = WebRequestMethods.Ftp.DownloadFile;

            // если требуется логин и пароль, устанавливаем их
            //request.Credentials = new NetworkCredential("login", "password");
            //request.EnableSsl = true; // если используется ssl

            // получаем ответ от сервера в виде объекта FtpWebResponse
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            // получаем поток ответа
            Stream responseStream = response.GetResponseStream();
            // сохраняем файл в дисковой системе
            // создаем поток для сохранения файла
            FileStream fs = new FileStream("newTest.txt",FileMode.Create);

            //Буфер для считываемых данных
            byte[] buffer = new byte[64];
            int size = 0;

            while ((size = responseStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                fs.Write(buffer, 0, size);

            }
            fs.Close();
            response.Close();
			
            Console.WriteLine("Загрузка и сохранение файла завершены");
            Console.Read();
        }
    }
}

В данном случае идет обращение к фтп-серверу "ftp://127.0.0.1", который я поднял на локальном компьютере, но это может быть любой адрес рабочего фтп-сервера. Если нам надо просто загрузить файл, то мы можем использовать метод

request.Method = WebRequestMethods.Ftp.DownloadFile

При отправке запроса нам надо указать соответствующий метод.

Если фтп-сервер требует установки логина и пароля, то применяется свойство Credentials:

request.Credentials = new NetworkCredential("login", "password");

Если сервер использует ssl-соединение, то надо его установить в запросе: request.EnableSsl = true

После отправки запроса мы можем получить ответ в виде FtpWebResponse:

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();

Получив поток ответа, мы можем им манипулировать. В данном случае с помощью FileStream сохраняем файл в папку программы под именем newTest.txt.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850