Sample code for 30+ languages & platforms
Xojo Plugin

SFTP Synchronize Tree Upload with ProgressInfo Callbacks

See more SFTP Examples

Demonstrates an SFTP synchronization tree upload (local files to SFTP server), with progress info callbacks to monitor each file uploaded.

Chilkat Xojo Plugin Downloads

Xojo Plugin
Class MySFtp
    Inherits Chilkat.SFtp

    Sub ProgressInfo(name As String, value As String)
        System.DebugLog("ProgressInfo: " + name + ", " + value)

        Dim sbName As New Chilkat.StringBuilder
        success = sbName.Append(name)
        If (sbName.ContentsEqual("syncUploadFile") = True) Then
            Dim xml As New Chilkat.Xml
            success = xml.LoadXml(value)
            Dim file_localPath As String
            file_localPath = xml.GetAttrValue("localPath")
            Dim file_remotePath As String
            file_remotePath = xml.GetAttrValue("remotePath")
        End If
    End Sub

End Class

Dim success As Boolean
success = False

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

Dim sftp As New MySFtp

success = sftp.Connect("my-ssh-server.com",22)
If (success = True) Then
    success = sftp.AuthenticatePw("mySshLogin","mySshPassword")
End If

If (success = True) Then
    success = sftp.InitializeSftp()
End If

If (success <> True) Then
    System.DebugLog(sftp.LastErrorText)
    Return
End If

// Synchronize (by uploading) the local directory tree rooted at "c:/ckAssets/qa_data/syncRemote2/"
// with the remote directory tree rooted at "qa/syncRemote2"
// The remote directory
// is relative to the HOME directory of the SSH user account.
// The local directory is an absolute path (but could be a relative path if desired)

Dim remoteDir As String
remoteDir = "qa/syncRemote2"
Dim localDir As String
localDir = "c:/ckAssets/qa_data/syncRemote2/"

// Possible modes that can be passed to the SyncTreeUpload method are:
// mode=0: Upload all files
// mode=1: Upload all files that do not exist on the server.
// mode=2: Upload newer or non-existant files.
// mode=3: Upload only newer files. If a file does not already exist on the server, it is not uploaded.
// mode=4: transfer missing files or files with size differences.
// mode=5: same as mode 4, but also newer files.

// Because we want to see the ProgressInfo callbacks, upload all files..
Dim mode As Int32
mode = 0

// This example turns on recursion to synchronize the entire tree. 
// Recursion can be turned off to synchronize the files of a single directory.
Dim recursive As Boolean
recursive = True
success = sftp.SyncTreeUpload(localDir,remoteDir,mode,recursive)
If (success <> True) Then
    System.DebugLog(sftp.LastErrorText)
    Return
End If

System.DebugLog("Success.")

// Here is sample output of the above code showing the ProgressInfo values.
// If the name is "syncUploadFile", then the value is a snippet of XML containing the local file path and the remote file path of the file
// being uploaded.

// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\accentedLatin1.txt" remotePath="qa/syncRemote2/accentedLatin1.txt" />
// ProgressInfo: SendByteCount, 52
// ProgressInfo: SendBytesPerSec, 52000
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\accentedUtf8.txt" remotePath="qa/syncRemote2/accentedUtf8.txt" />
// ProgressInfo: SendByteCount, 226
// ProgressInfo: SendBytesPerSec, 226000
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\anter_cert.pem" remotePath="qa/syncRemote2/anter_cert.pem" />
// ProgressInfo: SendByteCount, 2165
// ProgressInfo: SendBytesPerSec, 2165000
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\mv.exe" remotePath="qa/syncRemote2/mv.exe" />
// ProgressInfo: SendByteCount, 9922165
// ProgressInfo: SendBytesPerSec, 24438830
// ProgressInfo: SendByteCount, 20898165
// ProgressInfo: SendBytesPerSec, 25705000
// ProgressInfo: SendByteCount, 31554165
// ProgressInfo: SendBytesPerSec, 25885287
// ProgressInfo: SendByteCount, 42242165
// ProgressInfo: SendBytesPerSec, 25995178
// ProgressInfo: SendByteCount, 48066165
// ProgressInfo: SendBytesPerSec, 23666255
// ProgressInfo: SendByteCount, 50821629
// ProgressInfo: SendBytesPerSec, 23916060
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\abc\chiliPepper.gif" remotePath="qa/syncRemote2/abc/chiliPepper.gif" />
// ProgressInfo: SendByteCount, 50829347
// ProgressInfo: SendBytesPerSec, 23919692
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\chiliPepper.gif" remotePath="qa/syncRemote2/data/chiliPepper.gif" />
// ProgressInfo: SendByteCount, 50837065
// ProgressInfo: SendBytesPerSec, 23923324
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\dkimHtmlBody.txt" remotePath="qa/syncRemote2/data/xyz/dkimHtmlBody.txt" />
// ProgressInfo: SendByteCount, 50837250
// ProgressInfo: SendBytesPerSec, 23923411
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\dkimVerifyTest.eml" remotePath="qa/syncRemote2/data/xyz/dkimVerifyTest.eml" />
// ProgressInfo: SendByteCount, 50840884
// ProgressInfo: SendBytesPerSec, 23925121
// ProgressInfo: syncUploadFile, <file localPath="c:\ckAssets\qa_data\syncRemote2\data\xyz\emailForCreateDsn.eml" remotePath="qa/syncRemote2/data/xyz/emailForCreateDsn.eml" />
// ProgressInfo: SendByteCount, 50845086
// ProgressInfo: SendBytesPerSec, 23927099