FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Subir y descargar archivos en una FTP
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Subir y descargar archivos en una FTP
Posted: Wed Jun 11, 2025 07:46 PM

Hola gente!

Estoy desempolvando unas funciones que tenía para subir y descargar archivos desde una FTP (usando la clase tFtp)

Si bien hace el proceso correctamente de subida, no me tira error alguno, pero tampoco graba en

la FTP, revisé los permisos de la carpeta, he retomado una que ya usaba hace varios años atrás, pero sin resultados.

Mi función de enviar es:

IF FTPSendFiles({"c:\archivo.txt"}, {"/libreria/" + "archivo.txt"})

MsgInfo("Pudo enviar")

ELSE

MsgStop("No pudo enviar")

ENDIF

..

..

RETURN NIL

//----------------------------------------------------------------------------//

STAT FUNC FTPSendFiles(aSource,aTarget)

*SUBIR ACTUALIZACIÓN

LOCAL oInternet,oFtp,RETORNO:=.F.,aFiles:={}

LOCAL accesoBD:={"ftp.miweb.com.ar","miusuario","miclave"}

oInternet:=tInternet():New()

oFtp:=tFtp():New(accesoBD[1],oInternet,accesoBD[2],accesoBD[3])

IF !Empty(oFtp:hFtp)

RETORNO:=SendFiles(aSource,aTarget,oFtp)

oFtp:End()

oInternet:End()

ENDIF

RETURN(RETORNO)

//----------------------------------------------------------------------------//

STAT FUNC SendFiles(aSource,aTarget,oFtp)

*ENVIAR ARCHIVOS

LOCAL n,hSource,cBuffer:=Space(4096),nBytes,nFile:=0,nTotal:=0,nTotSize:=0,oFile

FOR n:=1 to LEN(aSource)

hSource:=FOpen(aSource[n])

nTotSize+=FSeek(hSource,0,2)

FClose(hSource)

NEXT

FOR n:=1 TO LEN(aSource)

hSource:=FOpen(aSource[n])

oFile:=TFtpFile():New(aTarget[n],oFtp)

oFile:OpenWrite()

FSeek(hSource,0,0)

nFile:=0

WHILE (nBytes:=FRead(hSource,@cBuffer,4096))>0

nTotal+=nBytes

oFile:Write(SubStr(cBuffer,1,nBytes))

ENDDO

FClose(hSource)

oFile:End()

NEXT

RETURN nTotal=nTotSize

Alguno me puede dar una idea porque no funciona?

Muchas gracias!!

Roberto

PD: Usando FW Diciembre 2024

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 12, 2025 11:16 AM

Hola gente...

nadie utiliza FTP?

Que otra alternativa puedo utilizar para actualizar mis sistemas?

Hasta ahora, utilizo subir mi ejecutable comprimido a una tabla de una BD MySql,

pero, ante el reclamo de mi proveedor, tengo que cambiar el formato.

Que puedo utilizar para subir algún archivo y luego descargarlo desde mi sistema?

Muchas gracias!

Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 12, 2025 07:14 PM

Gracias!

Revisaré estos hilos para ver si puedo hacer funcionar...

Es raro, porque esto funcionaba... a no ser que sea problemas de mi servicio,

pero estuvimos revisando y no tengo forma de probarlo.

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 12, 2025 09:03 PM
Estimado TOTOVIOTTI

Utilizo éste código:
   oCon:=Turl():New("ftp://"+FTPUser+":"+FTPPass+"@"+cftpsite)
   oFTP:=TIpClientFtp():New(oCon, .f.)
   oFTP:open()
    oFtp:UploadFile("D:\SISTEMAS\DATA\BASE.DBF","SISTEMAS\DATA\BASE.DBF")
    oFtp:close()
Para comprobar podes usar éste script
@echo off
echo user ftpuser> ftpcmd.dat
echo ftppass>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put base.dbf>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftpsite
del ftpcmd.dat
PAUSE
o desde el explorador de windows escribir: FTP://ftpsite
Saludos,



Adhemar C.
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 12, 2025 10:09 PM

Hice el UpLoadFile y me da este error:

IF !oFtp:UpLoadFile( cFileOri, cFileDes )

msginfo(oFtp:LastErrorMessage())

endif

"Closed socket"

Entonces estimo que debe ser un problema de mi router? O será de mi proveedor

de la ftp?

No entiendo mucho de hardware...

Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Subir y descargar archivos en una FTP
Posted: Wed Jun 18, 2025 02:06 PM
Hola Roberto buenos días como estas?
Hola gente...
nadie utiliza FTP?

Que otra alternativa puedo utilizar para actualizar mis sistemas?
Hasta ahora, utilizo subir mi ejecutable comprimido a una tabla de una BD MySql,
pero, ante el reclamo de mi proveedor, tengo que cambiar el formato.

Que puedo utilizar para subir algún archivo y luego descargarlo desde mi sistema?
Alguna vez lo intentamos de esa manera, pero la verdad tampoco lo logramos, lo resolvimos subiendo el ejecutable, desde nuestra pagina web mediente https, para la descarga creamos un endpoint que se encarga de gestionar la descarga, como cadena de texto, funciona relativamente bien, salvo algunas maquinas de nuestros clientes que tienen antivirus cansones como el Norton entre otros jejejejeje
Function descargarInstalador()
Local hInfo := {=>}
Local lSiDescargo := .F.
Local cExe := space(0)
Local rutaExeTm := ".\temp\"
Local oHandle 
Local hExe := {=>}
IF !IsInternet()
	aInfo := {.F.,"No Se Pudo Comprobar La Conexión a Internet"}
ELSE
	user := "elusuario"
	pass := "lacontraseña"   
	cBas64 := hb_base64encode(user+":"+pass,len(user+":"+pass))
	
	hInfo["user"] := getenv("USERNAME")
	hInfo["machine"] := NetName()
	hInfo["usua"] := user
	hInfo["pass"] := pass
	
	cInfo := hb_jsonEncode( hInfo )	
	
	ohttp := CreateObject( "MSXML2.XMLHTTP" )
	ohttp:Open( "POST" ,"https://laurldelendpoint.com",.F.)
	oHttp:SetRequestHeader("cache-control", "no-cache")
	ohttp:SetRequestHeader("content-type", "application/json" )
	ohttp:SetRequestHeader("authorization", "Basic "+cBas64 )
	TRY
	  ohttp:Send( cInfo )
	CATCH
		aInfo := {.F.,"No Se Pudo Enviar Documento JSON"}
	END
	response:=ohttp:responseText
	aHasRes := hash()
	hb_jsondecode(response ,@aHasRes)
	if valtype(aHasRes)="U"
		hExe["descargo"] := .F.
		hExe["error"] := "No se pudo descargar instalador"
	else
	
		rutaExeTm += aHasRes["nombre_exe"]
		
		cExe := hb_base64decode(aHasRes["elexe"])
		oHandle := FCreate(rutaExeTm)
		FWrite(oHandle,cExe,Len(cExe))
		FClose(oHandle)	

		hExe["descargo"] := .T.
		hExe["error"] := ""
		hExe["ruta_descarga"] := rutaExeTm

	endif
ENDIF
return hExe
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Subir y descargar archivos en una FTP
Posted: Wed Jun 25, 2025 07:44 PM

Buenísimo Leandro!

Y para subir el archivo? Lo suben a mano o tienen un proceso automatizado?

Gracias

Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 26, 2025 11:18 AM
Buen dia...

Recomiendo ver chilkat... https://www.example-code.com/foxpro/default.asp

Me ha servido para,, crear y leer xml, firmar y enviar electrónicas DIAN, enviar correos, subir y bajar via ftp, api rest ...

ejp :
function subirFtp() 


LOCAL loFtp
LOCAL lnSuccess
LOCAL lcLocalPath
LOCAL lcRemoteFilename

loFtp = CreateObject('Chilkat.Ftp2')

loFtp.Hostname = "ftp.someFtpServer.com"
loFtp.Username = "my_ftp_username"
loFtp.Password = "my_ftp_password"

* Connect and login to the FTP server.
lnSuccess = loFtp.Connect()
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Change to the remote directory where the file will be uploaded.
lnSuccess = loFtp.ChangeRemoteDir("junk")
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Upload a file.
lcLocalPath = "c:/temp/hamlet.xml"
lcRemoteFilename = "hamlet.xml"

lnSuccess = loFtp.PutFile(lcLocalPath,lcRemoteFilename)
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

lnSuccess = loFtp.Disconnect()

? "File Uploaded!"

RELEASE loFtp

RETURN 

//******************************

FUNCTION bajarFtp()

LOCAL loFtp
LOCAL lnSuccess
LOCAL lcLocalFilename
LOCAL lcRemoteFilename

loFtp = CreateObject('Chilkat.Ftp2')
ftpEventHandler = CreateObject("ftpEvents")
EventHandler(loFtp,ftpEventHandler)

loFtp.Hostname = "ftp.someFtpServer.com"
loFtp.Username = "myLogin"
loFtp.Password = "myPassword"

* Connect and login to the FTP server.
lnSuccess = loFtp.ConnectOnly()
IF (lnSuccess <> 1)
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

lnSuccess = loFtp.LoginAfterConnectOnly()
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

* Change to the remote directory where the file is located.
* This step is only necessary if the file is not in the home directory
* of the FTP account.
lnSuccess = loFtp.ChangeRemoteDir("junk")
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

lcLocalFilename = "c:/temp/hamlet.xml"
lcRemoteFilename = "hamlet.xml"

* Ensure that we get PercentDone callbacks.
loFtp.AutoGetSizeForProgress = 1

* Download the file.
lnSuccess = loFtp.GetFile(lcRemoteFilename,lcLocalFilename)
IF (lnSuccess <> 1) 
    ? loFtp.LastErrorText
    RELEASE loFtp
    CANCEL
ENDIF

lnSuccess = loFtp.Disconnect()

? "File Downloaded!"

RELEASE loFtp

RETURN
Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 26, 2025 12:53 PM
asi lo hago yo y funciona correctamente
//----------------------------------------------------------------------------//
Function FTPSendFiles( cFTPSite, aSource, aTarget, cUserFtp, cPassFtp )

Local lEnd := .f.
Local nBufSize := 2000
Local oInternet, oFTP

MsgRun( "Conectando al Sitio FTP...", "Espere...",;
              { || oInternet := TInternet():New(),;
                  If( Empty( oInternet:hSession ),;
         MsgAlert( "Sin Conexión a Internet!" ),),;
                oFTP := TFTP():New( cFTPSite, oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp) ) } )

if Empty( oFTP:hFTP )
   MsgStop( "Imposible Conectarse al Sito FTP!" )
   return nil
endif

SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )

oInternet:End()

return nil
//----------------------------------------------------------------------------//
Static Function SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )

Local n
Local hSource
Local cBuffer := Space( nBufSize )
Local nBytes, nFile := 0, nTotal := 0
Local nTotSize := 0
Local oFile

for n = 1 to Len( aSource )
   if ! File( aSource[ n ] )
      MsgStop( "Archivo No Encontrado: " + aSource[ n ] )
      exit
   endif
   hSource = FOpen( aSource[ n ] )
   nTotSize += FSeek( hSource, 0, 2 )
   FClose( hSource )
next

for n = 1 to Len( aSource )
   hSource = FOpen( aSource[ n ] )

   oFile = TFtpFile():New( aTarget[ n ], oFTP )
   oFile:OpenWrite()
      FSeek( hSource, 0, 0 )
      nFile := 0
      while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 .and. ! lEnd
         oFile:Write( SubStr( cBuffer, 1, nBytes ) )
      end
      FClose( hSource )
      oFile:End()
      if lEnd
        exit
      endif
   next
Return nil
//----------------------------------------------------------------------------//
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jun 26, 2025 06:57 PM

Gracias estimados!!

Revisaré ambos casos y veo que pasa!

Muchas gracias

Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 400
Joined: Tue Oct 16, 2007 05:51 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jul 17, 2025 02:21 AM

Saludos,

Yo hize una libreria que trabaja con una dll net, para subir y descargar archivos en SFTP con fivewin, si alguien le interesa puede contactarme al privado

albeiroval at gmail.

Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jul 17, 2025 02:46 AM
Albeiro, funciona de Maravilla,
gracias por desarrollar el wrapper para harbour
ya te envié una aportación !!!!
saludos !!!
#include "fivewin.ch"
/*
	Proyecto para subir archivos al servidor via SFTP NET
	By SysCtrl Software
	15-jul-2025
*/

FUNCTION Main()
  MsgRun("Subiendo Archivo", "Por Favor Espere ...", {|| Enviar()})
RETURN Nil  

STATIC FUNCTION Enviar()
	LOCAL lOk 
	LOCAL cHost := "95.111.250.43"
	LOCAL cUser := "root"
	LOCAL cPasword := "SysCtrl123"
	LOCAL cFile := "bin.zip"
	LOCAL cRuta := "/www/html_public/descargas/" + cFile
	
	lOk := SftpUploadNet( cHost, 22, cUser, cPasword, cFile, cRuta )	
	
	if lOk 
	   ? "Envio Correcto"
	else 
	   ? "Error envio"
	endif   
RETURN NIL
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 400
Joined: Tue Oct 16, 2007 05:51 PM
Re: Subir y descargar archivos en una FTP
Posted: Thu Jul 17, 2025 03:00 AM
Albeiro, funciona de Maravilla,
gracias por desarrollar el wrapper para harbour
ya te envié una aportación !!!!
Cesar, muchas gracias estimando :D
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com

Continue the discussion