Загрузить файл на FTP C # - StatusCode 150 - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь загрузить файл на FTP. Файл отправляется на сервер правильно, но try-catch перехватывает веб-исключение со статусом 150. В чем проблема?

 try
 {
      var request = (FtpWebRequest)WebRequest.Create(host);
      request.Method = WebRequestMethods.Ftp.UploadFile;
      request.Credentials = new NetworkCredential(user, password);
      request.EnableSsl = true;

      byte[] data;
      using (var sourceStream = new StreamReader(filePath)
      {
           data = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
      }

      request.ContentLength = data.Length;

      using (var requestStream = request.GetRequestStream())
      {
           requestStream.Write(data, 0, data.Length);
      }

      using (var response = (FtpWebResponse)request.GetResponse())
      {
           Console.WriteLine($"Upload File Complete,status{response.StatusDescription}");
      }
 }
 catch(WebException ex)
 {
      var response = (FtpWebResponse)ex.Response;
 }

1 Ответ

0 голосов
/ 11 января 2019

Мне не удалось воспроизвести проблему, на которую вы претендуете, используя ваш код (кстати, в одном из них отсутствует закрывающая скобка) с Pure-FTPd. Хотелось бы указать, что 150 - это код, который сервер генерирует, когда он принимает запрос клиента (по каналу управления) на загрузку / скачивание определенного файла и собирается инициировать соединение для передачи данных с клиентским приложением через порт, указанный в недавнем Команда ПОРТ. Это промежуточный код состояния, а не ошибка. Ошибки начинаются с 4xx или 5xx

Мартин Р поднял хорошую мысль в комментариях (теперь удаленных), что не должно быть исключений, если что-то не так уж и плохо; вам следует рассмотреть возможность приостановки вашего кода в отладчике на var response = (FtpWebResponse)ex.Response; и использовать окно locals для полной проверки исключения, любых сообщений об ошибках, внутренних исключений и т. д.

Я рекомендую вам использовать более функциональную библиотеку FTP; FTPWebRequest невероятно прост и включает несколько операций ftp в модель запроса / ответа, которая не очень подходит System.Net.FtpClient становится немного старше, но должен быть доступен через nuget, как и компонент WinSCP .NET Мартина Прикрыла (активно поддерживается и развивается)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...