【问题标题】:C# FTP 550 errorC# FTP 550 错误
【发布时间】:2010-12-16 18:45:22
【问题描述】:

我正在尝试通过 FTP 以编程方式下载 C# 中的文件,这里是相关代码(显然带有假凭据和 URI):

try
{
    var request = FtpWebRequest.Create("ftp://ftp.mydomain.com/folder/file.zip");
    request.Credentials = new NetworkCredential("username", "password");

    using (var response = request.GetResponse())
    {
         ...
    }
}
catch (WebException we)
{
    ...
}

request.GetResponse() 处引发异常,错误代码为 550。问题不在于凭据或 URI,因为它们在 IE 中运行良好,并且文件在那里成功下载。我错过了什么?我应该使用其他类型的凭证对象吗? request 对象上是否有我未设置的属性?任何帮助将不胜感激。

【问题讨论】:

    标签: c# ftp


    【解决方案1】:

    原来 FTP 根目录不一定与 URL 根目录相同。也许我混淆了术语,所以让我解释一下:在我的例子中,连接到 ftp.mydomain.com 已经从 /folder 开始,所以我的 URL 只需是 ftp://ftp.mydomain.com/file.zip。 IE8 知道如何消除原始路径中多余的 /folder 部分,而 FtpRequest 类不知道,这就是它在 IE8 中工作但在 C# 代码中不起作用的原因。

    【讨论】:

    • 这是我的问题。我需要在目录“上传”中放置一个文件,但在登录时,该文件夹默认为“下载”。通过命令行进行 ftp 时,“cd upload”自动切换到“../upload”。但 URL 必须是 ftp.mydomain.com/../upload/file.txt 而不是 ftp.mydomain.com/upload/file.txt
    • 我可以给他一百万票...但我几乎肯定会失去我的特权。
    【解决方案2】:

    在本地路径部分的开头加上另一个斜杠(在主机名:端口之后):

    var request = FtpWebRequest.Create("ftp://ftp.mydomain.com//folder/file.zip");
    

    这对我有用。

    【讨论】:

    • 这也适用于我,但我很好奇你是如何想出这个解决方案的?
    • @NickLarsen 好吧,我假设 FtpWebRequest 会将 URL 解析为 ftp:///。双斜杠表示 以斜杠开头 = path 是绝对的(即相对于 FTP 根目录)。
    • 这太奇怪了。 ftp.mydomain.com/folder1/folder2 有效,但要深入到层次结构中,我必须使用 ftp.mydomain.com//folder1/folder2/folder2/folder4...
    【解决方案3】:

    这是我使用的,我敢打赌 .Method 是您缺少的主要内容

            request = (FtpWebRequest)FtpWebRequest.Create(address);
            request.Credentials = new NetworkCredential("username", "password");
            request.UsePassive = true;
            request.UseBinary = true;
            request.Proxy = null;
    
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            FtpWebResponse dataResponce = (FtpWebResponse)request.GetResponse();
    

    【讨论】:

    • 我会仔细检查您的凭据中没有大写或拼写错误。
    • 四重检查,甚至反复复制粘贴,不幸的是没有这样的运气:-(。此外,尽管它们是默认值,但我确实尝试按照您的建议将这些值分配给属性,以防万一. 再次,没有运气。
    【解决方案4】:

    你还没有设置Method

     request.Method = WebRequestMethods.Ftp.DownloadFile;
    

    【讨论】:

    • 我检查了,request.Method 默认设置为WebRequestMethods.Ftp.DownloadFile
    【解决方案5】:

    与我的 FTP 服务器的连接显示不同的行为,具体取决于我尝试连接的位置。在我的本地网络中,它仅在域部分之后使用一个斜杠,例如 ftp://test.test.com/folder/myfile.txt

    但在远程机器上,我必须使用两个斜杠,例如 ftp://test.test.com//folder/myfile.txt

    双斜线方法适用于这两种情况。

    【讨论】:

    • 您是如何想到这个解决方案的?
    【解决方案6】:

    我最近遇到了这个问题,经过大量测试后发现这里和那里之间的某些模块不喜欢大小写混合的 URI,因此我的解决方案是在 URI 上使用 .ToLower()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多