C# SFTP upload files

The best library/NuGet Package that I found was SSH.NET by Renci. Open up Nuget Package Manager and install this into your project.

The upload can be done with a stored file or a byte[] file.


Upload byte[] file

// you could pass the host, port, usr, and pass as parameters
public void FileUploadSFTP()
{
    var host = "whateverthehostis.com";
    var port = 22;
    var username = "username";
    var password = "passw0rd";
    
    // http://stackoverflow.com/questions/18757097/writing-data-into-csv-file/39535867#39535867
    byte[] csvFile = DownloadCSV(); // Function returns byte[] csv file

    using (var client = new SftpClient(host, port, username, password))
    {
        client.Connect();
        if (client.IsConnected)
        {
            Debug.WriteLine("I'm connected to the client");

            using (var ms = new MemoryStream(csvFile))
            {
                client.BufferSize = (uint)ms.Length; // bypass Payload error large files
                client.UploadFile(ms, GetListFileName());
            }
        }
        else
        {
            Debug.WriteLine("I couldn't connect");
        }
    }
}

Upload From a Stored File

This was the site that I used as a resource to get me started: http://blog.deltacode.be/2012/01/05/uploading-a-file-using-sftp-in-c-sharp/

It's written for uploading files.

// you could pass the host, port, usr, pass, and uploadFile as parameters
public void FileUploadSFTP()
{
    var host = "whateverthehostis.com";
    var port = 22;
    var username = "username";
    var password = "passw0rd";

    // path for file you want to upload
    var uploadFile = @"c:yourfilegoeshere.txt"; 

    using (var client = new SftpClient(host, port, username, password))
    {
        client.Connect();
        if (client.IsConnected)
        {
            Debug.WriteLine("I'm connected to the client");

            using (var fileStream = new FileStream(uploadFile, FileMode.Open))
            {
                
                client.BufferSize = 4 * 1024; // bypass Payload error large files
                client.UploadFile(fileStream, Path.GetFileName(uploadFile));
            }
        }
        else
        {
            Debug.WriteLine("I couldn't connect");
        }
    }
}

Hopefully this is helpful for anyone trying to upload a file using SFTP in C#.


What you are trying to do here is to establish a FTPS connection which is not a SFTP connection. The EnableSsl option only activates FTP over TLS (so FTPS). It uses Port 21 to connect to the server.

If you really have activated SFTP in FileZilla, you have to use an SSH connection on port 22 to connect to the server (SFTP = SSH File Transfer Protocol). The easiest method to obtain this should be using SharpSSH.

You can also take a look into this question.

Tags:

C#