Page 1 of 1

FTP Best Options ?

PostPosted: Fri Mar 03, 2023 6:42 pm
by TimStone
I have been using cURL for JSON internet data transfers, and wininet.dll for file transfers. I've seen other examples here, and know the .dll interface is "older technology".

I am looking to update my interface for FTP uploads and downloads. I need to do the following:
    Upload a file
    Download a file
    See what files are available on the server
    Delete a file on the server after downloading

I'm sure this is a familiar scenario. I would like to know what current methodologies are you using to accomplish these tasks. I am using FWH ( always latest version ), Harbour, MSVC 2020, with 32 and 64 bit builds.

Thanks for your suggestions.

Re: FTP Best Options ?

PostPosted: Sat Mar 04, 2023 2:16 am
by Otto
Hello Tim,

I am working on the same problem right now.
FTP should be replaced with secure FTP.
I don't have an example here yet.

For FTP I use the following function.

I wanted to change now unlike you to cURL: https:// and send with cURL.

curl --cacert /path/to/cacert.pem https://example.com

But I get this error: SSL certificate verify result: unable to get local issuer certificate (20)

Do you send with cURL and https?

Best regards,
Otto

Code: Select all  Expand view


function download()
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "192.168.0.230", oInternet,"remanco", "pwremanco" )
   local aFiles
   local handle
   *----------------------------------------------------------

   if ! Empty( oFTP:hFTP )

      FtpSetCurrentDirectory(oFTP:hFTP, "/usr/cheshire/boh/")

      aFiles = oFTP:Directory("rms.dat" )

      IF len(aFiles) > 0
            AEval( aFiles, { | aFile | FtpGetFile ( oFTP:hFTP, aFile[ 1 ], "c:\remanco\" + aFile[ 1 ] ,.t.,0,0,0 )  } )
      ENDIF

   else
        //  MsgAlert( "
oFTP:hFTP is null" )
   endif

   oInternet:End()

return nil




function f_senden( cDatei )
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "
ftp.test.info", oInternet, "salettainfo", "pwsaletta" )
   local aInfo := {}
   local I := 0
   local cAktivInfoDir := Setup():AppPath + "
report" //Setup():Daten() + "\xReport"
 
   *----------------------------------------------------------

   if Empty( oFTP:hFTP )
      MsgStop( "
Cannot connect to the specified FTP site!" )
      return nil
   endif



   if ! Empty( oFTP:hFTP )

      select EMPFAREP
      do while .not. eof()

            if  FTPPUTFILE(  oFTP:hFTP,  cAktivInfoDir + "
\"+ cDatei, "/salettainfo/AktivInfo/1" + Alltrim(EMPFAREP->email)  , 0, 0 ) = .t.

            else
               msginfo("
konnte nicht gesendet werden:   "   +   cAktivInfoDir + "\" + cDatei + CRLF +;
                  "
/salettainfo/AktivInfo/" + cDatei  )
            endif

         select EMPFAREP
         skip
      enddo
   else

      MsgAlert( "
oFTP:hFTP is null" )

   endif


   ferase (  cAktivInfoDir + "
\" + cDatei)

   oInternet:End()
    logfile( "
aktivInfo.log", {  "nach senden ", } )
return nil
//----------------------------------------------------------------------------//


Re: FTP Best Options ?

PostPosted: Sat Mar 04, 2023 11:21 am
by Marc Venken

Re: FTP Best Options ?

PostPosted: Sun Mar 05, 2023 7:49 pm
by TimStone
I have reviewed the various options, and the pages Marc provided prior to making this post.

Otto, your example uses what was supposed to be the simplified tInternet class with tFTP. It works for obtaining a directory. HOWEVER, that class has no UPLOAD or DOWNLOAD methods.

SO ... I'm still hoping for more clarification or an answer to my question.

We are so dependent on the internet for conducting business that I would think this would be a priority for FiveWin.

Re: FTP Best Options ?

PostPosted: Sun Mar 05, 2023 9:51 pm
by Otto
Hi Tim,
Can't you use ftpgetfile and ftpputfile as shown in my example?

Just out of interest: what do you want to send.

For example, I create reports and deliver them via email.

So far, I have always sent the data with ftp to a server and from there the emails.

Now I send directly from the customer server directly.

Or using mod harbour there are a several ways to send data to the server.

Best regards,
Otto

Re: FTP Best Options ?

PostPosted: Sun Mar 05, 2023 9:57 pm
by TimStone
Sorry, I didn't see them in there. I did find another sample that had them and appear to have it working now.

Thanks.

Re: FTP Best Options ?

PostPosted: Thu Mar 09, 2023 3:03 am
by TimStone
Otto,

Is there a method to delete a file on the server ?

Re: FTP Best Options ?

PostPosted: Thu Mar 09, 2023 8:15 am
by Marc Venken
oConn:DropTable( "clientes" )

Just seen Otto.. This is for table inside a connectie. Otto is correct. Sorry

Re: FTP Best Options ?

PostPosted: Thu Mar 09, 2023 8:56 am
by Otto
Hello Tim,
I use
Code: Select all  Expand view



 
FtpSetCurrentDirectory(oFTP:hFTP, "/meldemax")
aFiles = oFTP:Directory("*.*" )
xbrowse(aFiles)
IF len(aFiles) > 0

AEval( aFiles, { | aFile | msginfo( aFile[ 1 ] ),cFile := ALLTRIM( aFile[ 1 ] ),;
cFile := STRTRAN(UPPER(cFile),".TXT",".LTX"),;

FtpGetFile (oFTP:hFTP,aFile[ 1 ], "c:\dbf\" + aFile[ 1 ] ,.t.,0,0,0 ) ,;

oFTP:DeleteFile( aFile[ 1 ]),;

endif



Best regards,
Otto