Class Reference

This class provides SFTP (Secure FTP over SSH) support for connecting to SFTP servers.

DO wwSftpClient
DO wwutils  && for UI helpers only

*** Using Rebex Tiny SFTP Server for local testing
lcServer = "127.0.0.1"
lnPort = 23
lcUsername = "tester"
lcPassword = "password"

CLEAR

? "***  wwSftpClient Test***"
loFtp  = CREATEOBJECT("wwsFtpClient")
loFtp.cLogFile = "c:\temp\ftp.log" && verbose log - leave empty
loFtp.lIgnoreCertificateErrors = .T.   && self-signed cert not installed

loFtp.cServer = lcServer
loFtp.nPort = lnPort
loFtp.cUsername = lcUsername
loFtp.cPassword = lcPassword


*** Optional Progress Events - clas below
loFtp.oProgressEventObject = CREATEOBJECT("SFtpClientProgressEvents")


IF !loFtp.Connect()
	? loFtp.cErrorMsg
	RETURN
ENDIF
? "Connected to " + lcServer	


IF !loFtp.DownloadFile("SubFolder/Sail-Big.jpg", "c:\temp\Sail-Big.jpg")
	? loFtp.cErrorMsg
	RETURN
ENDIF	
? "Downloaded " + "SubFolder/Sail-Big.jpg"

lcUploadFile = "SubFolder/Sail-Big-UPLOADED" + SYS(2015) + ".jpg"
IF !loFtp.UploadFile("c:\temp\Sail-Big.jpg", lcUploadFile)
	? loFtp.cErrorMsg
	RETURN
ENDIF
? "Uploaded " + lcuploadFile


*** provide a folder name (no wildcards)
loCol = loFtp.ListFiles("/SubFolder")
IF ISNULL(loCol)
   ? loFtp.cErrorMsg
   RETURN
ENDIF

? TRANSFORM(loCol.Count ) + " matching file(s)"
? loFtp.cErrorMsg
FOR EACH loFile IN loCol FOXOBJECT
   ? loFile.Name
   
   IF ( AT("Sail-Big-UPLOADED",loFile.Name) = 1)
	   *? loFtp.oBridge.ToJson(loFile)  && for kicks print out as json
	   IF loFtp.DeleteFile(loFile.FullName)
	      ? "*** Deleted " + loFile.FullName
	   ENDIF
   ENDIF
ENDFOR

loFtp.Close()
RETURN


DEFINE class SFtpClientProgressEvents as Custom

*** You can set this to .T. to abort an upload or download
lCancelDownload = .F.

FUNCTION OnFtpBufferUpdate(lnPercent, lnDownloadedBytes, lcRemotePath, lcMode)
  lcMsg = lcMode + ": " + TRANSFORM(lnPercent) + "% complete. " + lcRemotePath + " - " + TRANSFORM(lnDownloadedBytes) + " bytes"
  ? "*** " + lcMsg
ENDFUNC

ENDDEFINE