2017-09-26 57 views
0

我想使用FTP上传和下载文件。我设法将我的上传和下载方法的代码放在一起。我被困在同一个地方。FTP上传和下载 - 获取227或500错误

如果我使用:

ftpRequest.UsePassive = false; 
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponseStream(); 

它给了我500错误。 不过,如果我只使用:

FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponseStream(); 

我得到:远程服务器返回错误:227进入被动模式。

这在下载和上传方法中都是相同的行为。我可以使用在线客户端上传文件,所以我知道服务器设置正常。我禁用了杀毒软件的防火墙,因为有些线程提示,但这也不起作用。现在我不知道该怎么做。我的上传和下载的方法如下:

我上传方法

private static void Upload() 
{ 
    FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://ftp.myserver.com/"); 
    ftpRequest.Credentials = new NetworkCredential("username", "password"); 
    ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; 
    ftpRequest.UsePassive = false; 
    FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); 
    StreamReader streamReader = new StreamReader(response.GetResponseStream()); 

    string line = streamReader.ReadLine(); 
    while (!string.IsNullOrEmpty(line)) 
    { 
     Console.WriteLine(line); 
     line = streamReader.ReadLine(); 
    } 

    streamReader.Close(); 
} 

我的下载方法

FtpWebRequest reqFTP; 
    try 
     { 
      FileStream outputStream = new FileStream(@"C:\download.csv", FileMode.Create); 

      reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ftp.myserver.com/upload/myfile.csv")); 
      reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
      reqFTP.UseBinary = true; 
      reqFTP.UsePassive = false; 
      reqFTP.KeepAlive = true; 
      reqFTP.Credentials = new NetworkCredential("username", "password"); 
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
      Stream ftpStream = response.GetResponseStream(); 
      long cl = response.ContentLength; 
      int bufferSize = 2048; 
      int readCount; 
      byte[] buffer = new byte[bufferSize]; 

      readCount = ftpStream.Read(buffer, 0, bufferSize); 
      while (readCount > 0) 
      { 
       outputStream.Write(buffer, 0, readCount); 
       readCount = ftpStream.Read(buffer, 0, bufferSize); 
      } 

      ftpStream.Close(); 
      outputStream.Close(); 
      response.Close(); 
     } 
     catch (Exception ex) 
     { 

     } 

回答

0

这其实是一个完全可行的解决方案。在我的哥们的笔记本电脑上工作,但不是我的。似乎是一些防病毒设置。