文件传输协议和AS400

本文关键字:AS400 文件传输协议 | 更新日期: 2023-09-27 18:20:03

我当前收到以下错误:

远程服务器返回错误:(501)参数或自变量中存在语法错误

我已经对服务器进行了物理检查,文件确实存在,如果我打开命令提示符并键入以下代码,它就会工作:

ftp
open 192.168.1.2
cd /Images
get S12345.jpeg

这是正确的,然而,只要我尝试通过以下代码连接:

private bool DownloadPod(string server)
{
     string[] allocate = server.Split('''');
     string ftp = @"ftp://192.168.1.2/Images/" + allocate.Last();
     Uri uri = new Uri(ftp);
     // The code path for uri: ftp://192.168.1.2/Images/S12345.jpeg
     var request = WebRequest.Create(uri) as FtpWebRequest;
     if(request != null)
     {
           request.Method = WebRequestMethods.Ftp.DownloadFile;
           // Left credentials off for security.
           request.Credentials = new NetworkCredential(@"", @"");
           // The line that triggers the error (response)
           using(FtpWebResponse response = request.GetResponse() as FtpWebResponse)
                using(Stream stream = response.GetResponseStream())
                     using(StreamReader reader = new StreamReader(stream))
                     {
                           reader.ReadToEnd();
                           return true;
                     }
      }
     return false;
}

有人能向我解释一下为什么不起作用吗?

  • 凭据在命令提示符下工作
  • 服务器上的文件
  • 可以从命令提示符下载

根据MSDN:

要获得FtpWebRequest的实例,请使用Create方法。你可以还可以使用WebClient类从FTP服务器。当您指定使用FTP方案的网络资源(例如,"ftp://contoso.com")FtpWebRequest类提供了以编程方式与FTP服务器交互。

URI可以是相对的,也可以是绝对的。如果URI的形式为"ftp://contoso.com/%2fpath"(%2f是转义的'/'),则URI为绝对,当前目录为/path。但是,如果URI是形式的"ftp://contoso.com/path",首先是.NET Framework日志进入FTP服务器(使用Credentials属性),则当前目录设置为/路径。

这就是AS400期望数据通过的方式。

文件传输协议和AS400

在某些情况下,/字符无效或不被接受。

AS400可能需要通过使用/%2F进行更改,这将正确切换AS400上的目录。例如:

ftp://192.168.1.2/%2FImages/%2FS12345.jpeg

通过使用/%2F,它可以在目录之间移动。

其他详细信息可以在这里找到。