我尝试将文件上传到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;
}
答案 0 :(得分:2)
我无法使用您的代码针对Pure-FTPd重现您声称的问题(顺便说一句,它缺少一种用法的右括号)。要指出的是,服务器接收到客户端请求(通过控制通道)以上传/下载特定文件并即将在最近指定的端口上启动与客户端应用程序的数据连接时,服务器发出的代码是150 PORT命令。这是一个中间状态代码,不是错误。错误以4xx或5xx开头
Martin P在评论中提出了一个很好的观点(现在已删除),即如果有一些不对的地方,则不应有例外。您应该考虑在var response = (FtpWebResponse)ex.Response;
上的调试器中暂停代码,并使用locals窗口全面检查异常,任何错误消息,内部异常等
我建议您使用功能更强大的FTP库; FTPWebRequest非常难以置信,并且将一些ftp操作塞入了请求/响应模型中,因此不合适 System.Net.FtpClient现在变老了一些,但应该可以通过nuget进行访问,Martin Prikryl的WinSCP .NET组件(正在积极维护和开发)也应该可以使用