Вероятно многие сталкивались с необходимостью работы с FTP сервером из своего приложения. Меня тоже однажды постигла такая участь, поэтому сейчас мы решим достаточно простую задачу - отправить файл на FTP сервер.
Не забываем включить следующие пространства имен:
using System.Net; using System.IO;
Для реализации работы с FTP выполним следующие шаги:
- Создаем объект FtpWebRequest. Класс FtpWebRequest предоставляет возможность взаимодействовать с FTP-серверами.
- Определяем метод, по которому будет работать наш FTP клиент - в нашем случае это буде UploadFile - выгрузка файла на сервер. Тут можно посмотреть какие еще есть методы.
- Задать данные для авторизации на сервер (логин и пароль).
- Указать тип данных для передачи.
- Прочитать и отправить файл.
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();
}
Комментариев нет:
Отправить комментарий