错误:使用C#FTPwebRequest将文件部分上载到linux FTP

错误:使用C#FTPwebRequest将文件部分上载到linux FTP,c#,linux,file-upload,ftpwebrequest,vsftpd,C#,Linux,File Upload,Ftpwebrequest,Vsftpd,我们想上传文件到Ubuntu FTP服务器。我们可以使用文件Zilla将文件连接并上传到服务器。FTp服务器已启用SSL并具有TLS1.2。当上传或连接证书时,只有在接受证书后才会显示证书,我们才能连接或上传文件 需要有一个自动系统,在创建文件时将文件上传到FTP。为此,我们正在开发一个.NETC#应用程序,用于上传文件。我们可以连接到FTP,也可以用C#FtpWebRequest显示其中的文件。但是当上传一个文件到ubuntu FTP(vsFTP)(使用C#FTPWebRequest)时,文件

我们想上传文件到Ubuntu FTP服务器。我们可以使用文件Zilla将文件连接并上传到服务器。FTp服务器已启用SSL并具有TLS1.2。当上传或连接证书时,只有在接受证书后才会显示证书,我们才能连接或上传文件

需要有一个自动系统,在创建文件时将文件上传到FTP。为此,我们正在开发一个.NETC#应用程序,用于上传文件。我们可以连接到FTP,也可以用C#FtpWebRequest显示其中的文件。但是当上传一个文件到ubuntu FTP(vsFTP)(使用C#FTPWebRequest)时,文件会被部分上传,然后连接终止。此错误发生异常“GetResponse-远程服务器返回错误:(426)连接已关闭;传输已中止..”

已检查防火墙以确认这是否是导致问题的原因,因此在防火墙之外运行应用程序,但仍会得到相同的异常。添加了TLS1.2的代码,还添加了ServicePointManager.ServerCertificateValidationCallback的代码,但仍然无法使用成功响应上载文件

发现了一个类似的问题[与426-中止连接相关][1]执行了添加配置设置的建议,但即使这样也对我有用

任何能够将文件上传到LinuxFTP(TLS-Enable)的机构,请分享逻辑或让我知道在我的情况下需要做什么。 任何需要启用或禁用的FTP配置设置都可以帮助我修复此问题

只是为了确认何时禁用SSL并将其保持为普通FTp,我们可以毫无问题地上载文件

下面是用于上载文件的代码块

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://siteURl//home/Files/" + "Myfile.xml");
            request.Credentials = new NetworkCredential("UserName", "Password");
            request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            //request.KeepAlive = false;
            request.Timeout = 10000;
            request.UseBinary = true;
            request.UsePassive = true;
            request.KeepAlive = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            request.EnableSsl = true;
            
            ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
            
            StreamReader sourceStream = new StreamReader(filePath);
            byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
            sourceStream.Close();
            request.ContentLength = fileContents.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();
          FtpWebResponse response = (FtpWebResponse)request.GetResponse();
行FtpWebResponse response=(FtpWebResponse)request.GetResponse();是连接中止的地方,我们得到了错误get响应给出了426错误 [1] :

下面是ftp失败时得到的日志

   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5147134Z
System.Net Information: 0 : [7256] FtpControlStream#62468121 - Received response [426 Failure reading network stream.]
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5157116Z
System.Net.Sockets Verbose: 0 : [7256] Entering Socket#49652976::Dispose()
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5177039Z
System.Net Information: 0 : [7256] FtpWebRequest#66824994::(Releasing FTP connection#62468121.)
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5177039Z
System.Net Verbose: 0 : [7256] Entering FtpWebRequest#66824994::GetResponse()
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5187110Z
System.Net Information: 0 : [7256] FtpWebRequest#66824994::GetResponse(Method=STOR.)
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5187110Z
System.Net Error: 0 : [7256] Exception in FtpWebRequest#66824994::GetResponse - The remote server returned an error: (426) Connection closed; transfer aborted..
  at System.Net.FtpWebRequest.GetResponse()
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5286972Z
System.Net Verbose: 0 : [7256] Exiting FtpWebRequest#66824994::GetResponse() 
   ProcessId=4236
   DateTime=2020-10-09T10:46:50.5286972Z
System.Net Information: 0 : [5524] ServicePoint#60068066 - Closed as idle.
   ProcessId=4236
   DateTime=2020-10-09T10:48:17.3365536Z
System.Net Information: 0 : [5524] ServicePoint#57712780 - Closed as idle.```


  


FTP有文本模式和二进制模式。出现错误的一个原因是您试图以文本模式发送二进制数据。你说上传开始了,如果你在中间结束,然后尝试改变为二进制模式。谢谢JDWEN你的反应。我已经添加了使用二进制文件上传文件的代码。我刚刚用用于上传文件的代码块更新了我的初始帖子。如果您使用的是SSL/TLS,那么您是安全的,应该使用带有FTPS(而不是FTP)的URL。OK。。在fileZilla中,我使用协议作为FTP,加密作为**使用显式FTP over TLS是可用的*所以我在代码中使用了相同的。我在TLS中找到的大多数代码都将其用作FTP。让我检查一下如何使用FTPS