我正在尝试使用以下代码获取FTPS FileZilla服务器的目录列表:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
ftpRequest.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCertificate);
ftpRequest.Credentials = new NetworkCredential(user, pass);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
执行FtpWebResponse)ftpRequest.GetResponse()
时出现异常:
基础连接已关闭。服务器提交了协议 冲突。
当我切换到普通的FTP连接时。一切正常。
我是否遗漏了建立此FTPS连接的内容? 谢谢你的帮助
答案 0 :(得分:6)
当FtpWebRequest
设置为true时,它实际上会向服务器发出EnableSsl
命令,要求启动 Explicit FTPS会话。
在您的情况下,您必须将Filezilla Server配置为使用Explicit FTPS。该程序记录在Filezilla Wiki
上答案 1 :(得分:4)
我遇到了同样的问题,但是在ftpWriter.Close()上传文件。 另外,例如,在成功的PrinWorkingDirectory之后,我无法执行GetRequestStream。
这个问题在帖子中似乎是“Expect:100-continue” - 虽然我没有完全检查过这个问题,但问题出在那里。
我已尝试在互联网上找到的所有解决方案:将KeepAlive更改为true,添加到App.Config文件
<system.net>
<settings>
<servicePointManager expect100Continue="false"/>
<httpWebRequest useUnsafeHeaderParsing="true"/>
</settings>
</system.net>
没有什么真的有用。
我花了很多时间尝试不同的其他第三方库(想法我不太喜欢),直到最后我找到了一个使用相同类和方法但已经工作的代码! 在分析了代码之后,我终于想出了:代码针对的是.NET Framework 2.0,而我的代码是针对.NET Framework 4.5的。 我似乎微软在从Framework 3.5传递到Framework 4时做了一个小错误。
由于它不是将新项目转换为目标旧框架的解决方案,您可以为FTP操作创建一个dll,指向3.5 .NET Framework,或者,您可以使用第三方库。
我可能有点晚了,但未来可能会帮助其他受挫的开发者解决这个问题。
答案 2 :(得分:0)
这是从ftp迁移到sftp的时间!
您可以遵循以下代码参考:
using Renci.SshNet;
using System.IO;
private void UploadFileToSFTP()
{
try
{
String sourcefile = @"C:\path\file.txt";
String host = @"000.000.000.0";
String username = @"usename";
String password = @"password";
int port = 22;
string destinationpath = "/var/www/html/path/public/destinationfolder";
using (SftpClient client = new SftpClient(host, port, username, password))
{
client.Connect();
client.ChangeDirectory(destinationpath);
using (FileStream fs = new FileStream(sourcefile, FileMode.Open))
{
client.BufferSize = 4 * 1024;
client.UploadFile(fs, Path.GetFileName(sourcefile));
}
}
}
catch (Exception)
{
throw;
}
}
希望它将帮助像我一样遭受痛苦的另一个人。
谢谢!