【问题标题】:I cannot download the files from ftp server, but I can get list of files我无法从 ftp 服务器下载文件,但我可以获取文件列表
【发布时间】:2021-12-24 04:56:43
【问题描述】:

几周前,我在 aws windows 中设置了一个 ftp 服务器。 当我尝试使用 WebRequestMethods.Ftp.DownloadFile 在 ftp 服务器中下载文件时; ,它没有工作。 但是当我尝试使用 WebRequestMethods.Ftp.ListDirectory 从 ftp 服务器获取文件列表时,它确实有效! 我尝试用被动模式下载文件,所以我想在被动模式下会不会有问题,所以我用filezilla连接被动模式的ftp服务器。它确实运作良好。我可以在 ftp 服务器中看到文件列表和上传/下载文件。所以我认为被动模式至少运作良好,这可能不是问题。

这是我尝试从 ftp 服务器下载文件时收到的错误消息

System.Net.WebException:服务器返回错误:501 参数数量无效。

总是这条消息。

这是我为 ftp 下载连接编写的部分代码。


FtpWebRequest requestFTPUploder = (FtpWebRequest)WebRequest.Create(FTP_Address);
requestFTPUploder.UsePassive = true;
requestFTPUploder.Method = WebRequestMethods.Ftp.DownloadFile;
requestFTPUploder.Credentials = new NetworkCredential(User_Name, Password);


“FTP_Address”是用于连接的 ip v4 地址。我没有为我的 ftp 服务器设置 DNS 并且它适用于获取列表(WebrequestMethods.Ftp.ListDirectory) 我添加了 ':20' 和 ':21' 用于选择特定端口号。它也适用于获取文件列表。 请帮忙。我为此苦苦挣扎了好几个星期。

**如果我写错了,对不起。这是我第一次在 stackoverflow 中实际写一些东西。我总是阅读别人的问题。

【问题讨论】:

  • 我会使用不同的 ftp 库作为开始。 FtpWebRequest 非常有限,当然还有更多的功能 lobs - 例如 edFTP 或 WinSCP 的包装器。无论 FWR 发送什么,服务器都不喜欢它。获取发送的确切命令,并提供来自 FileZilla 的调试日志,以便我们进行比较
  • 通常当服务器将发送目录列表(通过端口 21 传输)但不会发送文件(通过随机选择的端口号传输,通常更高),这是因为火灾围墙。使用被动模式会有所帮助,因为它会反转方向;在正常情况下,服务器会为您提供一个端口并希望您连接到它。这可能是防火墙,所以被动地将它转过来并指示服务器连接到您(通常您对防火墙的控制比对服务器防火墙的控制更多)。现代路由器将看到 PASV 指令并动态地..
  • ..创建一个端口转发以便连接可以工作(如果您的客户端已经完成了类似 PASV 192.168.3.12,12345 的操作,路由器会将其调整为您的公共 IP,然后使用该信息创建端口转发以便从服务器到您的连接将成功) - 这意味着被动模式通常与典型的家庭或办公室 NAT 样式网络更兼容,即使它们本身没有防火墙
  • All in,如果 FileZilla 工作并且您的代码不需要,我们需要查看两者发出的命令的日志,以便我们可以比较差异 - 如果您无法轻松获取日志FWR - 参见例如stackoverflow.com/questions/9664650/… - 然后切换到使用另一个更愿意提供日志的库;它甚至可能使问题消失

标签: c# networking ftp


【解决方案1】:

我猜requestUploder 应该是requestDownloader。而且WebRequest.Create()deprecated

但无论如何,请尝试查看FTP_Address 变量。它应该以FTP_url 之类的名称命名,因此它应该包含 ftp 服务器内部文件的 URL(不仅仅是 ftp 服务器地址)。

FtpWebRequest request =
    (FtpWebRequest)WebRequest.Create("ftp://ftp.server.com/folder1/folder2/file.zip");

【讨论】:

  • 嗯,就像我说的,我的 ftp 服务器没有 dns 服务器地址。但是我可以在不支付 dns 公司获取 dns 服务器地址的情况下创建没有域名的 URL 吗?据我所知,这是不可能的。对吗?
猜你喜欢
  • 2015-03-21
  • 2012-10-13
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多