繁体   English   中英

将文件上传到FTP C#-StatusCode 150

[英]Upload file to FTP C# - StatusCode 150

我尝试将文件上传到ftp。 该文件已正确发送到服务器,但是try-catch捕获状态为150的Web异常。问题出在哪里?

 try
 {
      var request = (FtpWebRequest)WebRequest.Create(host);
      request.Method = WebRequestMethods.Ftp.UploadFile;
      request.Credentials = new NetworkCredential(user, password);
      request.EnableSsl = true;

      byte[] data;
      using (var sourceStream = new StreamReader(filePath)
      {
           data = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
      }

      request.ContentLength = data.Length;

      using (var requestStream = request.GetRequestStream())
      {
           requestStream.Write(data, 0, data.Length);
      }

      using (var response = (FtpWebResponse)request.GetResponse())
      {
           Console.WriteLine($"Upload File Complete,status{response.StatusDescription}");
      }
 }
 catch(WebException ex)
 {
      var response = (FtpWebResponse)ex.Response;
 }

我无法针对Pure-FTPd使用您的代码(顺便说一句,其中一种用法缺少了右括号)来重现您所声称的问题。 要指出的是,服务器接收到客户端请求(通过控制通道)以上传/下载特定文件并即将在最近指定的端口上启动与客户端应用程序的数据连接时,服务器发出的代码是150 PORT命令。 这是一个中间状态代码,不是错误。 错误以4xx或5xx开头

Martin P在评论中提出了一个很好的观点(现已删除),即如果有一些不对的地方,则不应有例外。 您应该考虑在var response = (FtpWebResponse)ex.Response;中的调试器中暂停代码var response = (FtpWebResponse)ex.Response; 并使用本地窗口完全检查异常,任何错误消息,内部异常等

我建议您使用功能更强大的FTP库。 FTPWebRequest非常难以置信,它使一些ftp操作陷入了不适合的请求/响应模型中。System.Net.FtpClient现在有点老了,但应该可以通过nuget来使用,Martin Prikryl的WinSCP .NET组件也应该可以使用(积极维护和发展)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM