In this article we are going to see how to upload a file to a FTP path and save it.
Steps to upload a file to FTP:
- Create a FTP web request.
- Create an output File stream and select the FTP destination path to store.
- Get Response from Request.
- Write the output file stream to the FTP path.
- Now the file is uploaded to the FTP path and placed in the specified path.
Step 1: Used Namespaces:
using System.Net;
using System.IO;
Step 2: Usage:
FTPUpload("C:\\default.aspx", "ftp://208.43.121.51/", "UserName", "Password");
Step 3: Creating NetworkCredential means passing username and password of FTP path
/// <summary>
/// NetworkCredential just to set the User and password of ftp path.
/// </summary>
public static NetworkCredential CreateNetworkCredentials(string ftpUserID, string ftpPassword)
{
return new NetworkCredential(ftpUserID, ftpPassword);
}
Step 4: Creating FTP web Request:
/// <summary>
///Creates the FTP web request
/// </summary>
public static FtpWebRequest CreateFTPRequest(string fullFtpPath, string fileName)
{
return (FtpWebRequest)FtpWebRequest.Create(new Uri(fullFtpPath + "/" + fileName));
}
Step 5: Upload File to FTP path:
//Upload into the ftp path.
public static void FTPUpload(string fileNamePath, string fullFtpPath,
string ftpUserID, string ftpPassword)
{
FileStream outputStream;
//Now the FTP web request completed and ready for response.
FtpWebRequest ftpWebRequest = GetFTPWebRequest(fileNamePath, fullFtpPath, ftpUserID, ftpPassword, out outputStream);
//Getting response from the request.
FtpWebResponse response = (FtpWebResponse)ftpWebRequest.GetResponse();
PassStreamDataToFileStream(response, outputStream);
}
Step 6: Setting Web Request and returning it:
//Download
public static FtpWebRequest GetDownloadFTPWebRequest(string path, string fileName, string fullFtpPath,
string ftpUserID, string ftpPassword, out FileStream fs)
{
//Creates file stream based on the passed path.
fs = new FileStream(path + "\\" + fileName, FileMode.Create);
//Creating FTP request.
FtpWebRequest reqFTP = CreateFTPRequest(fullFtpPath, fileName);
//Setting FTP Credentials.
reqFTP.Credentials = CreateNetworkCredentials(ftpUserID, ftpPassword);
reqFTP.KeepAlive = false;
// What mechanism you need to perform like download,upload etc in the FTP path.
reqFTP.Method = WebRequestMethods.Ftp.UploadFile
;
// Specify the data transfer type.
reqFTP.UseBinary = true;
// Notify the server about the size of the uploaded file
reqFTP.ContentLength = fs.Length;
return reqFTP;
}
Opens a file stream (System.IO.FileStream) to read the file to be uploaded
public static FileStream GetFileStream(string path, out long contentLength, out FileInfo fileInfo)
{
fileInfo = GetFileInfo(path);
contentLength = fileInfo.Length;
return fileInfo.OpenRead();
}
Step 7: Used to get file information:
public static FileInfo GetFileInfo(string path)
{
return new FileInfo(path);
}
Step 8: Creating the response to write if an error occurs:
/// <summary>
/// Get current response.
/// </summary>
public static HttpResponse GetHttpResponse()
{
return HttpContext.Current.Response;
}
Step 9: Writing the stream as a file into the FTP path:
//This is used for the Upload Purpose.
public static void PassStreamDataToFileStream(FtpWebResponse response, FileStream fs)
{
try
{
Stream stream = response.GetResponseStream();
int buffLength = 2048; // The buffer size is set to 2kb
byte[] buff = new byte[buffLength];
int contentLen;
// Stream to which the file to be upload is written
// Read from the file stream 2kb at a time.
contentLen = fs.Read(buff, 0, buffLength);
// Till Stream content ends.
while (contentLen != 0)
{
// Write Content from the file stream to the FTP Upload Stream
stream.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// Close the file stream and the Request Stream.
stream.Close();
fs.Close();
response.Close();
}
catch (Exception ex)
{
GetHttpResponse().Write(ex.Message + " Upload Error");
}
}
Thanks for reading this article. Have a nice day.