2013-11-19 5 views
1

У меня есть небольшая winform с C#, в которой я генерирую текстовые файлы, а затем перемещаю их на ftp-сервер. Когда я пытаюсь переместить их на сервере он терпит неудачу приОшибка при загрузке файла на ftp-сервер

The remote server returned an error: (530) Not logged in.

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

string[] FileName = Directory.GetFiles(outputpath); 

foreach (string txtFile in FileName) 
{ 
    FileInfo toUpload = new FileInfo(txtFile); 

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + tbFTPAddress.Text + @"//" + toUpload.Name); 

    request.Credentials = new NetworkCredential(tbFTPUserName.Text.Trim(), tbFTPPassword.Text.Trim()); 

    request.Method = WebRequestMethods.Ftp.UploadFile; 

    Stream ftpStream = request.GetRequestStream(); 
    FileStream file = File.OpenRead(txtFile); 

    int length = 1024; 
    byte[] buffer = new byte[length]; 
    int bytesRead = 0; 

    try 
    { 
     do 
     { 
      bytesRead = file.Read(buffer, 0, length); 
      ftpStream.Write(buffer, 0, bytesRead); 
     } 
     while (bytesRead != 0); 

     file.Close(); 
     ftpStream.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error encountered!", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
    finally 
    { 
     if (file != null) file.Close(); 
     if (ftpStream != null) ftpStream.Close(); 
    } 
} 

ошибка приходит на: Stream ftpStream = request.GetRequestStream();

Любые идеи?

Спасибо!

+0

Я должен добавить, что пароль содержит символ *. Это может быть проблема? – Sergiu

+0

Вы пробовали это с помощью другого внешнего ftp-сервера? – Noctis

ответ

0

Вы должны сначала позвонить GetResponse().

 FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(uri); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.Credentials = new NetworkCredential(Username, Password); 

     try 
     { 
      //You have to call this or you would be unable to get a stream :) 
      WebResponse response = fwr.GetResponse(); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

     FileStream fs = new FileStream(localfile), FileMode.Open); 
     byte[] fileContents = new byte[fs.Length]; 
     fs.Read(fileContents, 0, Convert.ToInt32(fs.Length)); 
     fs.Flush(); 
     fs.Close(); 

     //Now you are able to open a Stream 
     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     request.Abort(); 
+0

Здравствуйте, Марсель, благодарю вас за отзыв, но теперь, даже на моем локальном ftp-сервере, он терпит неудачу под 'Удаленным сервером была возвращена ошибка: (550) Файл недоступен (например, файл не найден, нет доступа).' At 'Stream ftpStream = request.GetRequestStream(); 'Вот модифицированный код в соответствии с вашим предложением:' request.Method = WebRequestMethods.Ftp.UploadFile; try { Ответ на запрос WebResponse = request.GetResponse(); } улов (исключение ex) { throw ex; } Поток ftpStream = request.GetRequestStream(); { throw ex; } Поток ftpStream = request.GetRequestStream(); FileStream file = File.OpenRead (txtFile); ' – Sergiu

+0

Кроме того, позвольте мне добавить AGAIN, что локально, код работает и создает/перемещает файлы. Поэтому я не думаю, что проблема связана с отсутствующим вызовом GetResponse(). – Sergiu

+0

звучит как странная проблема :). Удаленный FTP работает с одинаковыми настройками? Если не проверить свою конфигурацию. Возможно, удаленный сервер использует sftp или имеет другие ограничения. –

0

У меня тоже была эта ошибка. (Сначала вам не нужно получать ответ.) В моем случае это была проблема с разрешениями на FTP-сервер.

  1. Remote в свой FTP-сервер
  2. Перейдите к и щелкните правой кнопкой мыши папку/подпапку
  3. Выберите свойства
  4. Переключение на вкладку Безопасность
  5. Нажмите кнопку Изменить
  6. Убедитесь учетная запись пользователя IIS имеет доступ на запись
Смежные вопросы