FtpWebRequest

 Rate It (11)

FtpWebRequest

The FtpWebRequest class enables you to programatically create FTP connections to FTP Servers and transfer files.  If you are interested in using the FtpWebRequest class to upload files to a server, here is a code sample:

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];

 

    //will destroy the object immediately after being used

    using (FileStream fr = ff.OpenRead())

    {

        fr.Read(fileContents, 0, Convert.ToInt32(ff.Length));

    }

 

    using (Stream writer = ftpRequest.GetRequestStream())

    {

        writer.Write(fileContents, 0, fileContents.Length);

    }

    //Gets the FtpWebResponse of the uploading operation

    this.ftpResponse = (FtpWebResponse)this.ftpRequest.GetResponse();

    Response.Write(this.ftpResponse.StatusDescription); //Display response

}

catch (WebException webex)

{

    this.Message = webex.ToString();

}

 
 

Links

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx

 

Revision number 5, Sunday, August 23, 2009 2:59:20 PM by mbanavige

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.

Very nice and very useful, thanks!

okay, nice solution, but - is it possible to write a System.IO.Stream object's contents to thie FTP stream? I have the case where I have serialized some XML to a stream, and now I would like to write this, but using the default stream.Read(...) is not allowed. Tells me that this method is not implemented (as I think it needs to be overwridden) Short version: --- FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.KeepAlive = false; reqFTP.Method = WebRequestMethods.Ftp.UploadFile; reqFTP.UseBinary = true; int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; using (Stream strm = reqFTP.GetRequestStream()) { contentLen = (int)outputStream.Read(buff, 0, buffLength); while (contentLen != 0) { strm.Write(buff, 0, contentLen); contentLen = outputStream.Read(buff, 0, buffLength); } } --- Any ideas?

What is the solution if we are using multi language files(name of the file is in the same language) for uploading on web server. As currently m not able to upload any file conataining name other than english. It is giving problem(The remote server returned an error: (550) File unavailable (e.g., file not found, no access)). on "Stream strm = ftpRequest.GetRequestStream();" the file name i am using is "~$فية المشروع.doc". Any type of help would be appreciated. Thanks

Simple and easy.Thanks

Shortcuts

Table of Contents

Top Wiki Contributors

(last 30 days)

  1. mbanavige (7)
  2. yrb.yogi (5)
  3. srinivaskotra (3)
  4. XIII (2)
  5. rdmartin33 (2)
  6. Babunareshnarra (2)
  7. Dungimon (1)
  8. ali62b (1)
Microsoft Communities