简体   繁体   中英

Uploading a file to a ftp server fails

I have a small C# winform in which I generate some text files and then move them to an ftp server. When I try to move them to the production server it fails under

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

If I log in to the ftp via cmd/ftp with the same ftp address, username and password, everything is ok. I also installed a local ftp server on my machine and tested it to see if perhaps my code is generating the error, but locally it works like a charm, I have the problem only with the production ftp server. Below is my code to connect and upload the files to the ftp server:

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();
     }
}

The error comes at: Stream ftpStream = request.GetRequestStream();

Any ideas?

Thanks!

you have to call GetResponse() at first.

        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();

I had this error too. (You do not need to get the response first.) In my case, it was a problem of folder permissions on the FTP server.

  1. Remote in to your FTP server
  2. Navigate to and right-click the folder/subfolder
  3. Select properties
  4. Switch to the Security tab
  5. Click the Edit button
  6. Make sure the IIS user account has write access

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM