Ошибка FTP 227 при переходе в пассивный режим

Я пытаюсь загрузить файл на ftp-сервер. попробовал несколько примеров кода, но всегда получал эту ошибку, переходя в пассивный режим. например, я могу создать каталог с этим кодом

  FtpWebRequest reqFTP; попробуйте {//dirName = имя каталога для создания.  reqFTP = (FtpWebRequest) FtpWebRequest.Create (новый Uri ("ftp://" + ftpServerIP + "/" + dirName));  reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;  reqFTP.UseBinary = true;  reqFTP.Credentials = новый NetworkCredential (ftpUserID, ftpPassword);  reqFTP.UsePassive = false;  Ответ FtpWebResponse = (FtpWebResponse) reqFTP.GetResponse ();  Поток ftpStream = response.GetResponseStream ();  ftpStream.Close ();  response.Close ();} catch (Exception ex) {MessageBox.Show (ex.Message);}  

или, например, я могу переименовать файл. но не могу загрузить файл с этим кодом

  string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest) FtpWebRequest  .Create (новый Uri ("ftp://" + ftpServerIP + "/" + fileInf.Name)); reqFTP.Credentials = new NetworkCredential (ftpUserID, ftpPassword); reqFTP.KeepAlive = false; reqFTP.Method = WebRequesttMpethods.FTP.  .UploadFile; reqFTP.UseBinary = true; reqFTP.ContentLength = fileInf.Length; int buffLength = 2048; byte [] buff = новый байт [buffLength]; int contentLen; FileStream fs = fileInf.OpenRead (); попробуйте {Stream strm =  reqFTP.GetRequestStream ();  contentLen = fs.Read (buff, 0, buffLength);  в то время как (contentLen! = 0) {strm.Write (buff, 0, contentLen);  contentLen = fs.Read (buff, 0, buffLength);  } strm.Close ();  fs.Close ();} catch (Exception ex) {MessageBox.Show (ex.Message, «Ошибка загрузки»);}  

получение исключения в reqFTP .GetRequestStream () .

Если я использую reqFTP.UsePassive = false , я получаю «

Удаленный сервер вернул ошибку : (500) Синтаксическая ошибка, команда не распознана ».

Что мне делать?


1

Попробуйте этот пример

http://social.msdn.microsoft.com/Forums/en-US/0128e595-c8e2-4f5e-9426-fd93eb510cab /the-remote-server-return-an-error-227-enter-passive-mode-67228534212130

Если для UsePassive установлено значение false, необходимо убедиться, что порт для команды канал открыт (т. е. вам нужно определить конечные точки и правила доступа). Если нет веской причины не использовать пассивный, вам гораздо лучше использовать пассивный.

Надеюсь, это поможет.

Поделиться
отредактировано 20 сентября 2013 г. в 8:23
ответил 20 сен 2013 в 07:38
  • 1
    как я уже сказал, если я использую reqFTP.UsePassive = false, то я получаю «Удаленный сервер вернул ошибка: (500) Синтаксическая ошибка, команда нераспознана »- echbel 20 сен 2013 в 8:00
добавить комментарий |

Попробуйте этот пример

http://social.msdn.microsoft.com/Forums/en- US/0128e595-c8e2-4f5e-9426-fd93eb510cab/the-remote-server-return-an-error-227-enter-passive-mode-67228534212130

Если для UsePassive установлено значение false, то вам необходимо убедиться, что порт для командного канала открыт (т. е. вам нужно определить конечные точки и правила доступа). Если нет веской причины не использовать пассивный режим, вам гораздо лучше использовать пассивный.

Надеюсь, это поможет.


0

Итак, я знаю, что это запоздалый ответ, но я хотел поделиться своим опытом на случай, если у кого-то будет то же самое.

В моем случае я загружал некоторые файлы с Windows Server 2016. По некоторым причинам безопасности , Я активировал брандмауэр и, конечно же, добавил правило для входящего трафика в брандмауэр, чтобы разрешить 20 и 21 порт.

У меня была та же самая известная ошибка: 227 переходил в пассивный режим. Я проверил код в ошибка, это всегда были разные порты.

После некоторого поиска я обнаружил, что мне нужно добавить 49152-65534 среди разрешенных портов.

И это сработало.

Вот мой код

  публичный статический bool DownloadDocument (строка ftpPath, строка downloadPath) {bool retVal = false;  попробуйте {если (! Directory.Exists (Tools.LocalPath)) Directory.CreateDirectory (Tools.LocalPath);  используя (WebClient client = new WebClient ()) {client.Credentials = new NetworkCredential (Tools.FtpUserName, Tools.FtpPassword);  client.DownloadFile (ftpPath, downloadPath);  } retVal = true;  } catch (Exception ex) {UserMethods.ParseError (ex, "DownloadFile");  } return retVal;  }  

Поделиться
ответил 29 сен. : 47
добавить комментарий |

Итак, я знаю, что это запоздалый ответ, но я хотел поделиться своим опытом на случай, если у кого-то будет то же самое.

В моем случае я загружал некоторые файлы с Windows Server 2016. По некоторым причинам безопасности я активировал брандмауэр и, конечно же, добавил правило для входящего трафика в брандмауэр, чтобы разрешить 20 и 21 порт.

У меня была та же самая известная ошибка: 227 входит в пассивный режим. Я проверил код, в ошибке всегда были указаны разные порты..

После некоторого поиска я обнаружил, что мне нужно добавить 49152-65534 среди разрешенных портов.

И это сработало.

Вот это мой код

  public static bool DownloadDocument (строка ftpPath, строка downloadPath) {bool retVal = false;  попробуйте {если (! Directory.Exists (Tools.LocalPath)) Directory.CreateDirectory (Tools.LocalPath);  используя (WebClient client = new WebClient ()) {client.Credentials = new NetworkCredential (Tools.FtpUserName, Tools.FtpPassword);  client.DownloadFile (ftpPath, downloadPath);  } retVal = true;  } catch (Exception ex) {UserMethods.ParseError (ex, "DownloadFile");  } return retVal;  }  

Оцените статью
Botgadget.ru
Добавить комментарий