Клиентский класс FTP для .NET - PullRequest
       27

Клиентский класс FTP для .NET

3 голосов
/ 16 сентября 2008

Кто-нибудь знает хороший, надеюсь, бесплатный класс FTP для использования в .NET, который действительно может работать за HTTP-прокси или FTP-шлюзом? Материал FtpWebRequest в .NET в лучшем случае ужасен, и я действительно не хочу показывать свои собственные здесь.

Ответы [ 10 ]

2 голосов
/ 24 февраля 2010

Наш Rebex FTP прекрасно работает с прокси. В следующем коде показано, как подключиться к FTP с помощью HTTP-прокси (код взят со страницы Руководство по FTP ).

// initialize FTP client 
Ftp client = new Ftp();

// setup proxy details  
client.Proxy.ProxyType = FtpProxyType.HttpConnect;
client.Proxy.Host = proxyHostname;
client.Proxy.Port = proxyPort;

// add proxy username and password when needed 
client.Proxy.UserName = proxyUsername;
client.Proxy.Password = proxyPassword;

// connect, login 
client.Connect(hostname, port);
client.Login(username, password);

// do some work 
// ... 

// disconnect 
client.Disconnect();

Вы можете загрузить пробную версию по адресу www.rebex.net / ftp.net / download.aspx

1 голос
/ 16 сентября 2008

Лучшее, с чем я столкнулся, это edtFTP.net http://www.enterprisedt.com/products/edtftpnet/overview.html

Если вы предлагаете гибкость, вы не получаете во встроенных классах

1 голос
/ 16 сентября 2008

Вы можете попробовать "Indy.Sockets" . Он может обрабатывать множество сетевых протоколов высокого уровня, включая ftp.

1 голос
/ 16 сентября 2008

У меня нет особого опыта, но sharptoolbox предложение множество реализаций .

0 голосов
/ 03 декабря 2013

Вот мой код C # с открытым исходным кодом, который загружает файл на FTP через HTTP-прокси.

public bool UploadFile(string localFilePath, string remoteDirectory)
{
    var fileName = Path.GetFileName(localFilePath);
    string content;
    using (var reader = new StreamReader(localFilePath))
        content = reader.ReadToEnd();

    var proxyAuthB64Str = Convert.ToBase64String(Encoding.ASCII.GetBytes(_proxyUserName + ":" + _proxyPassword));
    var sendStr = "PUT ftp://" + _ftpLogin + ":" + _ftpPassword
        + "@" + _ftpHost + remoteDirectory + fileName + " HTTP/1.1\n"
        + "Host: " + _ftpHost + "\n"
        + "User-Agent: Mozilla/4.0 (compatible; Eradicator; dotNetClient)\n" + "Proxy-Authorization: Basic " + proxyAuthB64Str + "\n"
        + "Content-Type: application/octet-stream\n"
        + "Content-Length: " + content.Length + "\n"
        + "Connection: close\n\n" + content;

    var sendBytes = Encoding.ASCII.GetBytes(sendStr);

    using (var proxySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
    {
        proxySocket.Connect(_proxyHost, _proxyPort);
        if (!proxySocket.Connected)
            throw new SocketException();
        proxySocket.Send(sendBytes);

        const int recvSize = 65536;
        var recvBytes = new byte[recvSize];
        proxySocket.Receive(recvBytes, recvSize, SocketFlags.Partial);

        var responseFirstLine = new string(Encoding.ASCII.GetChars(recvBytes)).Split("\n".ToCharArray()).Take(1).ElementAt(0);
        var httpResponseCode = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$1");
        var httpResponseDescription = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$2");
        return httpResponseCode.StartsWith("2");
    }
    return false;
}
0 голосов
/ 04 сентября 2012

У меня возникла проблема с минимальными значениями: создайте клиент для явной связи FTPS через прокси-сервер Socks4.

После некоторого поиска и тестирования я нашел библиотеку .NET Starksoftftps. http://starksoftftps.codeplex.com/

Вот мой пример кода:

Socks4ProxyClient socks = new Socks4ProxyClient("socksproxyhost",1010);
FtpClient ftp = new FtpClient("ftpshost",2010,FtpSecurityProtocol.Tls1Explicit);
ftp.Proxy = socks;
ftp.Open("userid", "******");
ftp.PutFile(@"C:\519ec30a-ae15-4bd5-8bcd-94ef3ca49165.xml");
Console.WriteLine(ftp.GetDirListAsText());
ftp.Close();
0 голосов
/ 09 ноября 2011

.Net 4.0+ теперь включает в себя клиентский класс ftp - см. Эту ссылку msdn для получения дополнительной информации.

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx

Я вижу варианты даже для использования режима PASV и т. Д., Поэтому он выглядит полностью функциональным (или, я надеюсь, так).

0 голосов
/ 24 февраля 2010

Я недавно использовал это в своем проекте, и он отлично работал.

http://www.codeproject.com/KB/IP/ftplib.aspxt

0 голосов
/ 16 сентября 2008

Я уже давно пользуюсь http://sourceforge.net/projects/dotnetftpclient/, и он отлично справляется со своей задачей. Если вы используете соединение PASV, у вас не должно быть проблем с брандмауэром. Не уверен, что такое FTP-шлюз, но я не вижу, как HTTP-прокси повлияет на любое FTP-соединение.

0 голосов
/ 16 сентября 2008

System.Net.WebClient может обрабатывать URL-адреса ftp, и с ним немного проще работать. С его помощью вы также можете установить учетные данные и информацию о прокси.

...