我正在尝试使用C#中的FluentFTP实现FTP传输.获取目录列表非常简单,但我坚持下载文件.
我发现有一篇文章在其评论中有一个例子,但它不会编译,因为我无法找到FtpFile类的来源.
有没有人举例说明我是如何使用FluentFTP从ftp服务器下载文件的?
编辑:我在这里找到了一些例子https://github.com/hgupta9/FluentFTP但是没有关于如何实际下载文件的例子.
在本文中免费FTP库有一个例子,但它不编译.这是一个例子
FtpClient ftp = new FtpClient(txtUsername.Text, txtPassword.Text, txtFTPAddress.Text);
FtpListItem[] items = ftp.GetListing(); 
FtpFile file = new FtpFile(ftp, "8051812.xml"); // THIS does not compile, class FtpFile is unknown
file.Download("c:\\8051812.xml");
file.Name = "8051814.xml";
file.Download("c:\\8051814.xml");
ftp.Disconnect();
编辑:解决方案
我发现的文章包含一个让我走错方向的例子.似乎曾经有过一种下载方法,但现在已经很久了.所以答案就是让它去使用OpenRead()方法来获取流,而不是将该流保存到文件中.
得到
尝试从套接字流中读取数据超时!
使用 FluentFTP 连接到 FTP 时。
下面是我用来连接的源代码:
Console.WriteLine("Configuring FTP to Connect to {0}", hostname);
ftp = new FtpClient(hostname,port,new NetworkCredential(username,password));               
ftp.ConnectTimeout = 600000;               
ftp.ReadTimeout = 60000;
ftp.EncryptionMode = FtpEncryptionMode.Explicit;
ftp.SslProtocols = System.Security.Authentication.SslProtocols.Tls;
ftp.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
ftp.Connect();
Console.WriteLine("Connected to {0}", hostname);
ftp.SetWorkingDirectory(foldername);
Console.WriteLine("Changed directory to {0}", foldername);
void OnValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
{
    // add logic to test if certificate is valid here
    e.Accept = true;
}
用于成功连接的 FileZilla 日志文件。我可以通过 FileZilla 连接该位置。日志片段如下:
Console.WriteLine("Configuring FTP to Connect to {0}", hostname);
ftp …我正在尝试在代码中通过 SSL 打开 FTP 连接。我可以使用 WinSCP 的 FileZilla 连接并列出目录。但是当使用 .NET 代码列出目录时FtpWebClient,我收到错误
(425) 无法打开数据连接
由于我能够从同一台计算机使用 FileZilla 进行连接,因此我不确定如何解决此问题。
这是我的代码
public void FtpStuff()
{
   string url = "ftp://my.server.com";
   FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
   request.Credentials = new NetworkCredential("myname", "password");
   request.EnableSsl = true;
   request.Method = WebRequestMethods.Ftp.ListDirectory;
   FtpWebResponse response = (FtpWebResponse)request.GetResponse();
   StreamReader streamReader = new StreamReader(response.GetResponseStream());
   // This is the line that throws the exception
   string line = streamReader.ReadLine();
}
我也尝试过FluentFTP。这是我的代码。我得到了例外
无法建立数据连接:不允许操作。
public void FtpStuff()
{
   FtpClient client = new FtpClient();
   client.Host = "my.server.com";
   client.Credentials …我在本地计算机上使用IIS来测试FTP连接.我正在使用FluentFTP库连接到FTP.我使用以下代码连接到服务器.
FtpClient conn = new FtpClient();
conn.Host = firewallSslDetails.Address;
conn.Credentials = new NetworkCredential(firewallSslDetails.UserName, firewallSslDetails.Password);
conn.SslProtocols = System.Security.Authentication.SslProtocols.Default;
X509Certificate2 cert = new X509Certificate2(@"C:\Users\BizTalk360\Desktop\FtpSites\ServerCert.cer");
conn.EncryptionMode = FtpEncryptionMode.Implicit;
conn.DataConnectionType = FtpDataConnectionType.AutoActive;
conn.DataConnectionEncryption = true;
conn.EnableThreadSafeDataConnections = false;
conn.ClientCertificates.Add(cert);
conn.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
conn.Connect();
服务器返回我有以下错误.
FluentFTP.FtpCommandException:策略需要SSL.Win32错误:访问被拒绝.错误详细信息:SSL策略要求SSL用于控制通道.
对于通过FTP连接,上面的代码工作正常,对于使用SSL的FTP,它无法正常工作.
当我尝试连接到我的 FTP 服务器以使用 FluentFTP 上传文件时,我得到以下信息:
根据验证程序,远程证书无效。
然而 FileZilla 工作正常,没有错误或警告。
我是不是做错了什么,如果它实际上是服务器的问题,我怎么能忽略这个错误
这是我的代码:
var credentials = new NetworkCredential(Username, Password);
FtpClient client = new FtpClient(Host, credentials)
{
    Port = Port,
    EncryptionMode = FtpEncryptionMode.Explicit
};
client.DataConnectionEncryption = true;
client.Connect();
var result = client.UploadFileAsync(FilePathName, RemotePathName, AllowOverwrite ? FtpExists.Overwrite : FtpExists.Skip, CreateRemoteDirectory, token).GetAwaiter().GetResult();
client.Disconnect();
我也尝试添加事件 client.ValidateCertificate += Client_ValidateCertificate;
private static void Client_ValidateCertificate(FtpClient control, FtpSslValidationEventArgs e)
{
    e.PolicyErrors = SslPolicyErrors.None;
}
但我无法让它工作,我仍然遇到同样的错误。
这是 FileZilla 的输出:
Status: Selected port usually in use by a different protocol.
Status: Resolving …我正在尝试连接到 SFTP 服务器来下载一些文件。代码是用 C# 编写的,我使用 FluentFTP 连接到 FTP。客户端将端口指定为 22。但是当我尝试以下代码时,出现错误
由于数据包格式异常,握手失败
任何使用 FluentFTP 的人都可以建议我代码中缺少的内容。
FtpClient fclient = new FtpClient("xxx.yyy.com", "username", "password"); 
fclient.EncryptionMode = FtpEncryptionMode.Implicit;
fclient.SslProtocols = SslProtocols.Tls12;
fclient.Port = 22;                 
fclient.Connect();
谢谢。
我正在尝试使用 Fluent FTP 连接到 FTP 服务器。当我使用端口 22 (SFTP) 时,使用 Filezilla 没有任何问题。
但是我无法使用 Fluent FTP 连接到它。
var client = new FtpClient(Constants.FtpHost, Constants.FtpUsername, Constants.FtpPassword)
        {
            // DataConnectionType = FtpDataConnectionType.PASV,
            // EncryptionMode = FtpEncryptionMode.Implicit,
            // SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13,
            Port = 22
        };
        
Console.WriteLine("Connecting...");        
client.Connect();
Console.WriteLine("Connected");
我收到以下错误:无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应
当我取消注释DataConnectionType = FtpDataConnectionType.PASV时,没有任何变化。当我取消注释EncryptionMode = FtpEncryptionMode.Implicit时,出现以下错误: System.IO.IOException:无法确定帧大小或收到损坏的帧。
我再次遇到 FileZilla 或 WinSCP 0 问题。
任何帮助将不胜感激。