我已经在我的项目中使用FluentFTP
lib 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);
}
}
用户有权下载,创建和删除文件。但是我只能在服务器上创建目录。
这似乎是由于FluenFTP中缺少TLS会话恢复支持:https://github.com/robinrodricks/FluentFTP/issues/347
如果与服务器所有者确认,则必须切换到另一个FTP库。对于类似的问题(对于使用隐式TLS的隐式TLS),请参阅:Upload file to implicit FTPS server in C# with TLS session reuse
或要求所有者关闭会话恢复要求(尽管从安全角度来看这很糟糕)。>>