2

我已经使用FluentFTPlib im 我的项目通过 TLS 使用 FTP,但这里有些麻烦。

此代码工作正常:

using (var conn = new FtpClient("adress", "user", "password"))
{
    conn.EncryptionMode = FtpEncryptionMode.Explicit;
    conn.ValidateAnyCertificate = true;
    conn.Connect();

    conn.CreateDirectory("/test/path/that/should/be/created", true);
}

并创建了目录。但在其他示例中,它无法正常工作。

第一个示例(日志文件 - https://pastebin.com/jNyZ3fmD):

public static void DownloadFile()
{
    using (var conn = new FtpClient("adress", "user", "password"))
    {
        conn.EncryptionMode = FtpEncryptionMode.Explicit;
        conn.ValidateAnyCertificate = true;
            conn.Connect();

        conn.DownloadFile("localPath", "ftpPath", FtpLocalExists.Overwrite, FtpVerify.Retry);

    }
}

我有错误:

“将文件上传到服务器时出错。有关更多信息,请参阅 InnerException。” IOException: 身份验证失败,因为远程方已关闭传输流

尝试使用以下代码从 FTP 获取文件/目录列表在控制台中不返回任何内容(日志文件 - https://pastebin.com/V8AiLs8k):

using (var conn = new FtpClient("adress", "user", "password"))
{
    //conn.Connect();
    conn.EncryptionMode = FtpEncryptionMode.Explicit;
    conn.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
    conn.Connect();

    // get a recursive listing of the files & folders in a specific folder
    foreach (var item in conn.GetListing())
    {
        switch (item.Type)
        {

            case FtpFileSystemObjectType.Directory:

                Console.WriteLine("Directory!  " + item.FullName);
                Console.WriteLine("Modified date:  " + conn.GetModifiedTime(item.FullName));

                break;

            case FtpFileSystemObjectType.File:

                Console.WriteLine("File!  " + item.FullName);
                Console.WriteLine("File size:  " + conn.GetFileSize(item.FullName));
                Console.WriteLine("Modified date:  " + conn.GetModifiedTime(item.FullName));
                Console.WriteLine("Chmod:  " + conn.GetChmod(item.FullName));

                break;

            case FtpFileSystemObjectType.Link:
                break;
        }
        Console.WriteLine(item);
    }

}

用户有权下载、创建和删除文件。但我只能在服务器上创建一个目录。

4

1 回答 1

4

这似乎是由于 FluenFTP 中缺乏 TLS 会话恢复支持:
https ://github.com/robinrodricks/FluentFTP/issues/347

如果您与服务器所有者确认,您将不得不切换到另一个 FTP 库。对于类似的问题(对于隐式 TLS,当您使用显式 TLS 时),请参阅:
Upload file to implicit FTPS server in C# with TLS session reuse

或者要求所有者关闭会话恢复要求(尽管从安全角度来看这很糟糕)。

有关该问题的更多参考,另请参阅可以使用 FileZilla 或 WinSCP 连接到 FTP,但不能使用 FtpWebRequest 或 FluentFTP

于 2020-04-07T09:07:08.503 回答