C#. FTP отправка данных

Вероятно многие сталкивались с необходимостью работы с FTP сервером из своего приложения. Меня тоже однажды постигла такая участь, поэтому сейчас мы решим достаточно простую задачу - отправить файл на FTP сервер.

Не забываем включить следующие пространства имен:

using System.Net;
using System.IO;

Для реализации работы с FTP выполним следующие шаги:


  1. Создаем объект  FtpWebRequest. Класс FtpWebRequest предоставляет возможность взаимодействовать с FTP-серверами.
  2. Определяем метод, по которому будет работать наш FTP клиент - в нашем случае это буде UploadFile - выгрузка файла на сервер. Тут можно посмотреть какие еще есть методы.
  3. Задать данные для авторизации на сервер (логин и пароль).
  4. Указать тип данных  для передачи.
  5. Прочитать и отправить файл.
Смотрим подробнее как это сделать в коде:



        
        public void Upload(string filename, string ftpServerIP)
        {
            FileInfo filePath = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + filePath.Name;           

            FtpWebRequest reqFTP;            
         
            // Создаем FtpWebRequest 
            reqFTP = (FtpWebRequest)FtpWebRequest.Create
                     (new Uri(uri));

            reqFTP.Proxy = null; // БЕЗ Прокси

            // Задаем учетные данные для доступа к FTP           
            string ftpPassword = "anonymous";          
            string ftpUserID = "anonymous";
            reqFTP.Credentials = new NetworkCredential(ftpUserID,ftpPassword);

            // Возвращает или задает значение Boolean, которое указывает, следует ли закрывать 
            //управляющее подключение к FTP-серверу после завершения запроса.
            reqFTP.KeepAlive = false;

            // Задаем команду, которая будет отправлена на сервер
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // Указывает тип данных для передачи файлов.
            reqFTP.UseBinary = true;

            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = filePath.Length;

            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            
            int contentLen;
            // Открываем filestream (System.IO.FileStream) для чтения отправляемого файла
            FileStream fs = filePath.OpenRead();
            
            try
            {
                // Получает поток, используемый для выгрузки данных на FTP-сервер
                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);
                }

                strm.Close();
            }
            catch (Exception ex)
            {                
                fs.Close();                
            }
            
            fs.Close();
        }


Комментариев нет:

Отправить комментарий