我使用下面的示例代码将其上传到FTP,事实证明服务器不想使用匿名连接,但是我不知道如何更改它以能够在不违反该规则的情况下上传。
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/" + fileName);
request.Method = WebRequestMethods.Ftp.UploadFile;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("username", "password");
// Copy the contents of the file to the request stream.
byte[] fileContents;
using (StreamReader sourceStream = new StreamReader(file))
{
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
}
request.ContentLength = fileContents.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
}
[匿名凭证仍然是凭证。您可以通过删除行来摆脱它们
request.Credentials = new NetworkCredential("username", "password");
并且您根本不会将任何凭据发送到服务器。
但是,如MSDN docs的“备注”部分所述,不建议将FtpWebRequest类用于新开发。 Microsoft建议使用列出的here第三方库之一。
我还建议选择其中之一,因为它们提供了与FTP服务器通信的更可靠的方法。您可以启用日志记录,这将使您更容易了解为什么与服务器的通信完全失败。您将看到您的应用程序发送到服务器的所有命令以及服务器的所有响应。这些库还实现了所有基本操作,例如列表,下载,上传,权限设置,同步/异步等,因此您不必自己编写它们。