FTPS (FTP через SSL) в C # - PullRequest
       2

FTPS (FTP через SSL) в C #

10 голосов
/ 02 декабря 2010

Мне нужно руководство.Мне нужно разработать настраиваемый FTP на C #, который должен быть настроен с помощью файла App.Config.Кроме того, FTP должен отправить данные на любой сервер с любого клиента снова зависит от файла конфигурации.

Буду признателен, если кто-то может направить вас, если будет какой-либо API или любое другое полезное предложение, или направит меня в правильном направлении.

Ответы [ 3 ]

16 голосов
/ 11 августа 2011

Вы можете использовать FtpWebRequest ;однако это довольно низкий уровень.Существует класс более высокого уровня WebClient , который требует гораздо меньше кода для многих сценариев;однако по умолчанию он не поддерживает FTP / SSL.К счастью, вы можете заставить WebClient работать с FTP / SSL, зарегистрировав свой собственный префикс:

private void RegisterFtps()
{
    WebRequest.RegisterPrefix("ftps", new FtpsWebRequestCreator());
}

private sealed class FtpsWebRequestCreator : IWebRequestCreate
{
    public WebRequest Create(Uri uri)
    {
        FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(uri.AbsoluteUri.Remove(3, 1)); // Removes the "s" in "ftps://".
        webRequest.EnableSsl = true;
        return webRequest;
    }
}

После этого вы можете использовать WebClient почти как обычно, за исключением того, что ваши URI начинаются сftps: // "вместо" ftp: // ".Единственное предостережение в том, что вы должны указать параметр method, поскольку он не будет использоваться по умолчанию.Например,

using (var webClient = new WebClient()) {
    // Note here that the second parameter can't be null.
    webClient.UploadFileAsync(uploadUri, WebRequestMethods.Ftp.UploadFile, fileName, state);
}
3 голосов
/ 02 декабря 2010

Мы используем edtFTPnet с хорошими результатами.

0 голосов
/ 04 июля 2019

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

FtpWebRequest не так сложно использовать. Поэтому я считаю, что для одноразового использования лучше пойти по этому пути:

FtpWebRequest request =
    (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.EnableSsl = true;
request.Method = WebRequestMethods.Ftp.UploadFile;  

using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
    fileStream.CopyTo(ftpStream);
}

Ключ EnableSsl свойство .


Для других сценариев см .:
Загрузка и загрузка двоичного файла на / с FTP-сервера в C # /. NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...