FTP: Request to share samples
- nageswaragunupudi
- Posts: 10733
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 11 times
- Contact:
FTP: Request to share samples
Many of our colleagues are successfully using different approaches to upload/download files to/from FTP Servers and also to manage folders and files on FTP servers.
At the same time, there are also some users who are seeking such solutions.
We thought of pooling all approaches used by different users under one thread for the benefit of all members of our community.
We, therefore, request all those friends who are using FTP, to consider sharing their knowledge with others by posting some sample programs here.
Thanking you all in advance.
At the same time, there are also some users who are seeking such solutions.
We thought of pooling all approaches used by different users under one thread for the benefit of all members of our community.
We, therefore, request all those friends who are using FTP, to consider sharing their knowledge with others by posting some sample programs here.
Thanking you all in advance.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- RAMESHBABU
- Posts: 632
- Joined: Fri Oct 21, 2005 5:54 am
- Location: Secunderabad (T.S), India
- Been thanked: 5 times
Re: FTP: Request to share samples
Hi Friends,
These are the ftp functions, I have been using to Upload/Download files, past several years with out any fail:
UPLDDNLD.PRG :
UPLDDNLD.RC :
I hope, they are useful to the needy.
Please ensure that 'WININET.LIB' from BCC? / LIB folder is added in the link Script.
-Ramesh Babu
These are the ftp functions, I have been using to Upload/Download files, past several years with out any fail:
UPLDDNLD.PRG :
Code: Select all | Expand
#include "fivewin.ch"// File Attributes#define FILE_ATTRIBUTE_READONLY 1#define FILE_ATTRIBUTE_HIDDEN 2#define FILE_ATTRIBUTE_SYSTEM 4#define FILE_ATTRIBUTE_DIRECTORY 16#define FILE_ATTRIBUTE_ARCHIVE 32#define FILE_ATTRIBUTE_NORMAL 128#define FILE_ATTRIBUTE_TEMPORARY 256// Access Types for InternetOpen()#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS// Manifests#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "#define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.// Service Types for InternetConnect()#define INTERNET_SERVICE_FTP 1#define INTERNET_SERVICE_GOPHER 2#define INTERNET_SERVICE_HTTP 3// Flags for FTP#define INTERNET_FLAG_TRANSFER_ASCII 1#define INTERNET_FLAG_TRANSFER_BINARY 2// File Access Types#define GENERIC_READ 2147483648#define GENERIC_WRITE 1073741824STATIC cFtpSite, cFtpUserName, cFtpPassword, cDestinationFUNCTION Main()LOCAL lOk := .F. cFtpSite := "ftp.FtpSite.com"cFtpUserName := "abcd@FtpSite.com"cFtpPassword := "xyz@12345"cDestination := "/MyDestinationFolder/"* 1 UploadlOk := UpLoadDownLoad(1, {"uplddnld.prg"}, cDestination, "UPLDDNLD.PRG")* 2 DownloadUpLoadDownLoad(2, {cDestination+"/uplddnld.prg"}, "C:\FWH\SAMPLES\", "UPLDDNLD.PRG")RETURN nil********************************************************************************** FUNCTION UpLoadDownLoad(nOpt) - Upload / Download Data to/from FTP Site **********************************************************************************FUNCTION UpLoadDownLoad(nUpDown, aDataFiles, cDestination, cDataName, lAuto)LOCAL oBrush, oDlg, oGroup, oGroup1, oGroup2LOCAL oMeter1, oMeter2, nMeter1, nMeter2, cTitleLOCAL aUpLoadFiles := {}, aDownLoadFiles := {}LOCAL bAction, lOk := .F., lIsInternet := .F.LOCAL aGradiate := { { .25, nRgb( 152,194,152 ), CLR_WHITE }, { .75,CLR_WHITE, nRgb( 152,194,152 ) } }DEFAULT lAuto := .F.MsgInfo("Trying to connect to Internet. Please wait...")lIsInternet := IsInterNet()IF !lIsInternet RETURN .F.ENDIFIF nUpDown = 1 IF !lAuto aUpLoadFiles := ACLONE(aDataFiles) cTitle := "Uploading Data. Please wait..." bAction := {||lOk := FtpUpLoad( cFtpSite, ; cFtpUsername, ; cFtpPassword, ; oMeter1, ; oMeter2, ; aUpLoadFiles, ; cDestination, ; cDataName, ; lAuto, oDlg)} ELSE aUpLoadFiles := ACLONE(aDataFiles) lOk := FtpUpLoad( cFtpSite, cFtpUsername, cFtpPassword, ; oMeter1, oMeter2, aUpLoadFiles, ; cDestination, cDataName, lAuto) ENDIFELSE IF !lAuto aDownLoadFiles := ACLONE(aDataFiles) cTitle := "Downloading Data. Please wait..." bAction := {||lOk := FtpDownLoad(cFtpSite, ; cFtpUsername, ; cFtpPassword, ; oMeter1, ; oMeter2, ; aDownLoadFiles, ; cDestination, ; cDataName, ; lAuto,oDlg)} ELSE lOk := FtpDownLoad(cFtpSite, cFtpUsername, cFtpPassword,; oMeter1, oMeter2, aDownLoadFiles, ; cDestination, cDataName, lAuto, oDlg) ENDIFENDIFIF !lAuto DEFINE BRUSH oBrush GRADIENT aGradiate DEFINE DIALOG oDlg RESOURCE "CONNECT" ; COLORS CLR_BLACK, nRGB(250,239,247) ; TRANSPARENT BRUSH oBrush oDlg:cTitle := cTitle REDEFINE GROUP oGroup ID 301 OF oDlg TRANSPARENT COLOR CLR_HRED REDEFINE GROUP oGroup1 ID 302 OF oDlg TRANSPARENT COLOR CLR_HBLUE REDEFINE METEREX oMeter1 VAR nMeter1 ID 101 OF oDlg REDEFINE GROUP oGroup2 ID 303 OF oDlg TRANSPARENT COLOR CLR_HBLUE REDEFINE METEREX oMeter2 VAR nMeter2 ID 102 OF oDlg ; GRADIENT CHUNK { { 1/2, nRGB( 255, 251, 229 ), nRGB( 250, 223, 143 ) } ,; { 1/2, nRGB( 244, 194, 51 ), nRGB( 252, 235, 173 ) } } ; GRADIENT TRACK { { 1/2, nRGB( 198, 203, 213 ), nRGB( 219, 224, 233 ) } ,; { 1/2, nRGB( 224, 238, 237 ), nRGB( 224, 238, 237 ) } } ; * This block gets evaluated only the first time the DialogBox is painted !!! oDlg:bStart := {||(Eval( bAction), SysWait(1), oDlg:End())} ACTIVATE DIALOG oDlg CENTERED RELEASE BRUSH oBrush RETURN lOkENDIFRETURN lOk********************************************************************************** STATIC FUNCTION UpLoad(oMeter, cSourceFile, cDestination) **********************************************************************************STATIC FUNCTION FTPUpLoad(cFtpSite, cUsername, cPassword, oMeter1, oMeter2, ; aSourceFiles, cDestination, cDataName, lAuto, ; oDlg)LOCAL hInternet, hConnect, hSource, hDest, nReadLOCAL cSourceFile, cData := SPACE( 32768 ) //cData := SPACE( 1024 )LOCAL nPos := 0, n, lSucess := .T., nTotal := 0hInternet := InternetOpen( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )hConnect := InternetConnect( hInternet, cFtpSite, INTERNET_INVALID_PORT_NUMBER,; cUsername, cPassword, INTERNET_SERVICE_FTP, 0, 0 )IF !lAuto oMeter1:Set( 0 ) oMeter1:nTotal := LEN(aSourceFiles)ENDIFFOR n = 1 TO LEN(aSourceFiles) cSourceFile := SUBSTR(aSourceFiles[n],RAT("\",aSourceFiles[n])+1) hDest := FtpOpenFile( hConnect, cDestination+cSourceFile, GENERIC_WRITE, 0, 0 ) nTotal := FSize(aSourceFiles[n]) IF !lAuto oMeter2:Set( 0 ) oMeter2:nTotal := nTotal ENDIF hSource := FOpen(aSourceFiles[n]) WHILE .T. nRead := FRead( hSource, @cData, LEN( cData ) ) IF nRead = 0 IF FERROR() # 0 lSucess := .F. ENDIF EXIT ENDIF IF !InternetWriteFile( hDest, @cData, nRead ) lSucess := .F. EXIT ELSE nPos += LEN( cData ) IF !lAuto oMeter2:Set( nPos ) ENDIF ENDIF ENDDO IF !lAuto oMeter1:Set( n ) ENDIF FClose( hSource ) InternetCloseHandle( hDest ) SysRefresh() IF .NOT. lSucess EXIT ENDIFNEXTInternetCloseHandle( hConnect )InternetCloseHandle( hInternet )SysRefresh()IF .NOT. lAuto IF lSucess MsgInfo(cDataName+" has been Uploaded Successfully.") ELSE MsgInfo("Error in Uploading "+cDataName+".") ENDIFENDIFIF !lAuto oMeter2:Set( 0 ) oMeter1:Set( 0 ) oDlg:End()ENDIFRETURN lSucess********************************************************************************** STATIC FUNCTION DownLoad( oMeter, cSourceFile, cDestFile ) **********************************************************************************STATIC FUNCTION FTPDownLoad(cFtpSite, cUsername, cPassword, oMeter1, oMeter2, ; aSourceFiles, cDestFile, cDataName, lAuto, ; oDlg)LOCAL hInternet, hConnect, hSource, hDest, nReadLOCAL cSourceFile, cData := SPACE( 32768 ) //cData := SPACE( 1024 )LOCAL nPos := 0, n, lSucess := .T.hInternet := InternetOpen( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )hConnect := InternetConnect( hInternet, cFtpSite, INTERNET_INVALID_PORT_NUMBER,; cUsername, cPassword, INTERNET_SERVICE_FTP, 0, 0 )IF !lAuto oMeter1:Set( 0 ) oMeter1:nTotal := LEN(aSourceFiles)ENDIFFOR n = 1 TO LEN(aSourceFiles) cSourceFile := aSourceFiles[n] hSource := FtpOpenFile( hConnect, cSourceFile, GENERIC_READ, 0, 0 ) IF !lAuto oMeter2:Set( 0 ) oMeter2:nTotal := FtpGetFileSize( hSource ) ENDIF hDest := FCreate( cDestFile+SUBSTR(cSourceFile,RAT("/",cSourceFile)+1) ) WHILE .T. nRead := InternetReadFile( hSource, @cData ) IF nRead = -1 lSucess := .F. EXIT ENDIF IF nRead = 0 EXIT ENDIF FWRITE( hDest, cData, nRead ) nPos += LEN(ALLTRIM(cData)) IF !lAuto oMeter2:Set( nPos ) ENDIF ENDDO FClose( hDest ) InternetCloseHandle( hSource ) SysRefresh() IF !lAuto oMeter1:Set( n ) ENDIF IF .NOT. lSucess EXIT ENDIFNEXTInternetCloseHandle( hConnect )InternetCloseHandle( hInternet )SysRefresh()IF .NOT. lAuto IF lSucess MsgInfo(cDataName+" has been Downloaded Successfully.") ELSE MsgInfo("Error in Downloading "+cDataName+".") ENDIFENDIFIF !lAuto oMeter2:Set( 0 ) oMeter1:Set( 0 ) oDlg:End()ENDIFRETURN lSucess********************************************************************************** FTP Upload/Download FUNCTION Wrappers of WININET.LIB **********************************************************************************#pragma BEGINDUMP#include "windows.h"#include "wininet.h"#include "hbapi.h"HB_FUNC( INTERNETOPEN ){ hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );}//***********************HB_FUNC( INTERNETCLOSEHANDLE ){ hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );}//***********************HB_FUNC( INTERNETCONNECT ){ hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );}//***********************HB_FUNC( FTPOPENFILE ){ hb_retnl( ( LONG ) FtpOpenFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );}//***********************HB_FUNC( FTPGETFILESIZE ){ DWORD nFileSizeHigh; hb_retnl( ( LONG ) FtpGetFileSize( ( HINTERNET ) hb_parnl( 1 ), &nFileSizeHigh ) );}//***********************HB_FUNC( INTERNETREADFILE ){ DWORD nBytesRead; BOOL lSuccess = InternetReadFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parclen( 2 ), &nBytesRead ); if ( !lSuccess ) hb_retnl( -1 ); else hb_retnl( nBytesRead );}//***********************HB_FUNC( INTERNETWRITEFILE ){ DWORD nBytesWritten; BOOL lSuccess = InternetWriteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), &nBytesWritten ); hb_retl( lSuccess );}HB_FUNC( FTPGETFILE ){ hb_retl( FtpGetFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parl( 4 ), hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ) ) );}HB_FUNC( FTPPUTFILE ){ hb_retl( FtpPutFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );}HB_FUNC( FTPDELETEFILE ){ hb_retl( FtpDeleteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );}HB_FUNC( FTPCREATEDIRECTORY ){ hb_retl( FtpCreateDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );}HB_FUNC( FTPREMOVEDIRECTORY ){ hb_retl( FtpRemoveDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );}HB_FUNC( FTPFINDFIRSTFILE ){ hb_retnl( ( LONG ) FtpFindFirstFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( WIN32_FIND_DATA * ) hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );}HB_FUNC( INTERNETFINDNEXTFILE ){ hb_retl( InternetFindNextFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );}#pragma ENDDUMP
UPLDDNLD.RC :
Code: Select all | Expand
CONNECT DIALOG 25, 31, 255, 97STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUCAPTION "Connecting to Modem..."FONT 8, "MS Sans Serif"{ GROUPBOX "Upload/Download", 301, 8, 6, 239, 81, BS_GROUPBOX GROUPBOX "Total Data", 302, 15, 15, 225, 31, BS_GROUPBOX CONTROL "TMeterEx", 101, "TMeterEx", 0 | WS_CHILD | WS_VISIBLE, 22, 25, 210, 14 GROUPBOX "Individual Data", 303, 15, 49, 225, 31, BS_GROUPBOX CONTROL "TMeterEx", 102, "TMeterEx", 0 | WS_CHILD | WS_VISIBLE, 22, 59, 210, 14}
I hope, they are useful to the needy.
Please ensure that 'WININET.LIB' from BCC? / LIB folder is added in the link Script.
-Ramesh Babu
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: FTP: Request to share samples
Dear Ramesh, many thanks
From Harbour contribs:
https://github.com/harbour/core/blob/master/contrib/hbtip/tests/ftp_ul.prg
https://github.com/harbour/core/blob/master/contrib/hbtip/tests/ftp_dl.prg
From Harbour contribs:
https://github.com/harbour/core/blob/master/contrib/hbtip/tests/ftp_ul.prg
https://github.com/harbour/core/blob/master/contrib/hbtip/tests/ftp_dl.prg
Re: FTP: Request to share samples
Every day the use of SFTP is more required. FTP is less and less used
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: FTP: Request to share samples
Paco,
thanks
I guess you mean FTPS and not SFTP
edited: I just tested Harbour hbtip connecting to a FTPS server and these lines worked as expected:
local oUrl := TUrl():New( "ftps://username:password@domainname.com" )
? oUrl:cProto
thanks
I guess you mean FTPS and not SFTP
SFTP (SSH File Transfer Protocol), not to be confused with FTPS (Secure FTP), runs on top of the SSH (Secure Shell) protocol
edited: I just tested Harbour hbtip connecting to a FTPS server and these lines worked as expected:
local oUrl := TUrl():New( "ftps://username:password@domainname.com" )
? oUrl:cProto
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: FTP: Request to share samples
SFTP (SSH File Transfer Protocol) is a secure file protocol that is used to access, manage, and transfer files over an encrypted SSH transport. When compared with the traditional FTP protocol, SFTP offers all the functionality of FTP, but it is more secure and easier to configure.
Antonio Linares wrote:Paco,
thanks
I guess you mean FTPS and not SFTPSFTP (SSH File Transfer Protocol), not to be confused with FTPS (Secure FTP), runs on top of the SSH (Secure Shell) protocol
edited: I just tested Harbour hbtip connecting to a FTPS server and these lines worked as expected:
local oUrl := TUrl():New( "ftps://username:password@domainname.com" )
? oUrl:cProto
- nageswaragunupudi
- Posts: 10733
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 11 times
- Contact:
Re: FTP: Request to share samples
hmpaquito wrote:SFTP (SSH File Transfer Protocol) is a secure file protocol that is used to access, manage, and transfer files over an encrypted SSH transport. When compared with the traditional FTP protocol, SFTP offers all the functionality of FTP, but it is more secure and easier to configure.Antonio Linares wrote:Paco,
thanks
I guess you mean FTPS and not SFTPSFTP (SSH File Transfer Protocol), not to be confused with FTPS (Secure FTP), runs on top of the SSH (Secure Shell) protocol
edited: I just tested Harbour hbtip connecting to a FTPS server and these lines worked as expected:
local oUrl := TUrl():New( "ftps://username:password@domainname.com" )
? oUrl:cProto
Thank you.
Would you like to share with other users how are you using SFTP, please?
Thanks in advance.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: FTP: Request to share samples
Hello Mr. Nages,
On one occasion I was required to use SFTP. I searched and searched in Fwh and Harbour and found no way. I finally had to rely on FTP
Regards
On one occasion I was required to use SFTP. I searched and searched in Fwh and Harbour and found no way. I finally had to rely on FTP
Regards
Re: FTP: Request to share samples
Saludos ;
Ejemplo donde use un PaintCircularMeter( ) dentro del ftp para pintar mientras se sube.
Ejemplo donde use un PaintCircularMeter( ) dentro del ftp para pintar mientras se sube.
Code: Select all | Expand
METHOD EnviaFtp(cFileaEnviar,cFileComplet) CLASS TElotLOCAL cUrl,cULLOCAL oSelf:=SELFcurl_global_init()cUrl := curl_easy_init()hb_default( @cUL, "ftp://107.180.57.119/"+cFileaEnviar )curl_easy_setopt( curl, HB_CURLOPT_URL, cUL )curl_easy_setopt( cUrl, HB_CURLOPT_UPLOAD )curl_easy_setopt( Curl, HB_CURLOPT_DL_BUFF_SETUP )curl_easy_setopt( curl, HB_CURLOPT_UL_FILE_SETUP, cFileComplet )curl_easy_setopt( curl, HB_CURLOPT_INFILESIZE, hb_vfSize(cFileComplet) )curl_easy_setopt( curl, HB_CURLOPT_USERPWD, "guaicarbackup@guaicar.com.ve:TuClaveFTP" )curl_easy_setopt( Curl, HB_CURLOPT_FAILONERROR, .T. )curl_easy_setopt( Curl, HB_CURLOPT_FILETIME, .T. )curl_easy_setopt( curl, HB_CURLOPT_XFERINFOBLOCK, {| nPos, nLen | PaintCircularMeter( oSelf:oWndZion:oWndClient, {130,30,430,330}, 0.5, nPos, nLen, ; { RGB( 0, 68, 118 ),Rgb( 237,165,12 ) } ) ; } )curl_easy_setopt( Curl, HB_CURLOPT_NOPROGRESS, 0 )curl_easy_setopt( Curl, HB_CURLOPT_VERBOSE, .F. )curl_easy_perform( cUrl )Return self
Mario Antonio González Osal
Venezuela
m a g 0 7 1 @ g m a i l. c o m
Venezuela
m a g 0 7 1 @ g m a i l. c o m
- Enrico Maria Giordano
- Posts: 8771
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Has thanked: 1 time
- Been thanked: 7 times
- Contact:
Re: FTP: Request to share samples
I successful used psftp.exe (part of Putty):
EMG
Code: Select all | Expand
https://www.puttygen.com/psftp
Code: Select all | Expand
FUNCTION SFTP( cSrv, cPrt, cUsr, cPsw, cFil ) LOCAL lOk MEMOWRIT( "psftp.cmd", "put " + cFil, .F. ) lOk = WAITRUN( "psftp " + cSrv + " -P " + cPrt + " -l " + cUsr + " -pw " + cPsw + " -b psftp.cmd", SW_HIDE ) = 0 FERASE( "psftp.cmd" ) RETURN lOk
EMG
Re: FTP: Request to share samples
thks mr. Enrico
BTW, is it possible obtain PSFTP command result ? success or not success ? how to ?
BTW, is it possible obtain PSFTP command result ? success or not success ? how to ?
- Enrico Maria Giordano
- Posts: 8771
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Has thanked: 1 time
- Been thanked: 7 times
- Contact:
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: FTP: Request to share samples
New Harbour and mod_harbour FTP upload using Curl example based on Mario's post and on mod_harbour callphp.prg example:
https://github.com/FiveTechSoft/mod_harbour/blob/master/samples/ftpup.prg
Working fine. You can test it from mod_harbour live examples:
https://www.modharbour.org/modharbour_samples/ftpup.prg
Now we need a SFTP server...
https://github.com/FiveTechSoft/mod_harbour/blob/master/samples/ftpup.prg
Working fine. You can test it from mod_harbour live examples:
https://www.modharbour.org/modharbour_samples/ftpup.prg
Now we need a SFTP server...

Re: FTP: Request to share samples
Antonio Linares wrote:Now we need a SFTP server...
Here you are: https://www.sftp.net/public-online-sftp-servers