连接到 ftps:// URL

Connect to ftps:// URL

我正在尝试使用此代码将文件上传到 FTP,我遇到的问题是当语法命中 serverURI.Scheme != Uri.UriSchemeFtp 时它 returns 错误。这是否意味着我的 URI 地址设置不正确?我知道这是一个有效的地址,我已经使用 ftptest.net 来验证站点是否正常运行并且 运行。我的语法有什么不正确的地方?

private void button1_Click(object sender, EventArgs e)
{
  Uri serverUri = new Uri("ftps://afjafaj.org");
  string userName = "Ricard";
  string password = "";
  string filename = "C:\Book1.xlsx";
  ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertificatePolicy;
  UploadFile(serverUri, userName, password, filename);
}

public bool AcceptAllCertificatePolicy(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
  return true;
}

public bool UploadFile(Uri serverUri, string userName, string password, string fileName)
{
  if (serverUri.Scheme != Uri.UriSchemeFtp)
    return false;

  try
  {
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
    request.EnableSsl = true;
    request.Credentials = new NetworkCredential(userName, password);
    request.Method = WebRequestMethods.Ftp.UploadFile;
    StreamReader sourceStream = new StreamReader(fileName);
    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();
    Console.WriteLine("Response status: {0}", response.StatusDescription);
  }
  catch (Exception exc)
  {
    throw exc;
  }
  return true;
}

ftps:// 前缀不是 standard IANA URI scheme. There's only ftp:// scheme, as defined by RFC 1738

无论如何,ftps:// 仍然被某些软件识别为引用 FTP over TLS/SSL 协议(安全 FTP)。这模仿 https:// 方案,它是基于 TLS/SSL 的 HTTP(https:// 是标准方案)。

尽管 .NET 框架无法识别 ftps://

要通过 TLS/SSL 连接到 显式 模式 FTP,请将您的 URI 更改为 ftp://,然后设置 FtpWebRequest.EnableSsltrue(您已经在做的事情)。


请注意,ftps:// 前缀通常是指 隐式 模式 FTP 而不是 TLS/SSL。 .NET 框架仅支持 explicit 模式。尽管即使您的 URI 确实指的是 implicit 模式,大多数服务器也会支持 explicit 模式。所以这通常不会成为问题。对于 explicit 模式,有时会使用 ftpes://。请参阅我的文章以了解 FTP over TLS/SSL implicit and explicit modes.

之间的区别