Uploading File using FtpWebRequest

 Rate It (10)

For those people who are interested to use FtpWebRequest to upload files on a server. Here is the code:
 
 
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
    
try
{
    //Settings required to establish a connection with the server
    this.ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://ServerIP/FileName"));
    this.ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
    this.ftpRequest.Proxy = null;
    this.ftpRequest.UseBinary = true;
    this.ftpRequest.Credentials = new NetworkCredential("UserName", "Password");
    
    //Selection of file to be uploaded
    FileInfo ff = new FileInfo("File Local Path With File Name");//e.g.: c:\\Test.txt
    byte[] fileContents = new byte[ff.Length];
    
    using (FileStream fr = ff.OpenRead()) //will destroy the object immediately after being used
    { 
       fr.Read(fileContents, 0, Convert.ToInt32(ff.Length));
    }
 
    using (Stream writer = ftpRequest.GetRequestStream())
    {
       writer.Write(fileContents, 0, fileContents.Length);
    }
 
    this.ftpResponse = (FtpWebResponse)this.ftpRequest.GetResponse(); //Gets the FtpWebResponse of the uploading operation
    Response.Write(this.ftpResponse.StatusDescription); //Display response
}
catch (WebException webex)
{
   this.Message = webex.ToString();
}

Revision number 1, Saturday, February 16, 2008 5:55:26 AM by
This is not the most up to date version of this article. The most recent version can be found here.

Comments

The FTP upload issue is a popular question topic on the forums and this code block is an excellent solution for most people. It should be noted though that if this code is running in a code behind file on a remote web server it is not possible to upload the file from the client side. The FTP source files will be residing on the machine that is running this code. I noticed that this was a point of confusion for some users.

Is this a secure FTP? If I want to do secured ftp, which method I should use? THanks

FtpWebRequest has EnableSsl property that you can use it to secure it I think.

Thanks for this great piece of code. One important thing that is missing from this is a note about using "ftpRequest.UsePassive = false" if you have a firewall enabled on the FTP server.

Shortcuts

Table of Contents

Top Wiki Contributors

(last 30 days)

  1. mbanavige (5)
  2. SGWellens (4)
  3. maartenba (2)
  4. rami_nassar (2)
  5. stiansol (2)
  6. MisterFantastic (2)
  7. satish1.v (1)
  8. raklos (1)
  9. mosessaur (1)
  10. Jos Branders (1)

Advertise Here

Microsoft Communities
Page view counter