FTPS (FTP через SSL) в С#
Мне нужно руководство. Мне нужно разработать настраиваемый FTP в С#, который должен быть настроен с использованием файла App.Config. Кроме того, FTP должен выталкивать данные на любой сервер с любого клиента, снова зависит от файла конфигурации.
Я буду признателен, если кто-то может руководствоваться, если есть какой-либо API или любое другое полезное предложение, или переместите меня в правильном направлении.
Ответы
Ответ 1
Вы можете использовать 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);
}
Ответ 2
Мы используем edtFTPnet с хорошими результатами.
Ответ 3
Принятый ответ действительно работает. Но я считаю слишком громоздким регистрировать префикс, реализовывать интерфейс и все такое, особенно, если вам это нужно только для одной передачи.
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-сервера в С#/. NET