Subir y descargar archivos en una FTP

Post Reply
User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

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
User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

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
User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

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
User avatar
acuellar
Posts: 1713
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Subir y descargar archivos en una FTP

Post by acuellar »

Estimado TOTOVIOTTI

Utilizo éste código:

Code: Select all | Expand

   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

Code: Select all | Expand

@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 Cuéllar

User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

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
User avatar
leandro
Posts: 1828
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Subir y descargar archivos en una FTP

Post by leandro »

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

Code: Select all | Expand

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/
[email protected]
[email protected]

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

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
russimicro
Posts: 413
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: Subir y descargar archivos en una FTP

Post by russimicro »

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 :

Code: Select all | Expand

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 

postinelli
Posts: 150
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Subir y descargar archivos en una FTP

Post by postinelli »

asi lo hago yo y funciona correctamente

Code: Select all | Expand

//----------------------------------------------------------------------------//
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
//----------------------------------------------------------------------------//
User avatar
TOTOVIOTTI
Posts: 470
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Subir y descargar archivos en una FTP

Post by TOTOVIOTTI »

Gracias estimados!!

Revisaré ambos casos y veo que pasa!

Muchas gracias
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
User avatar
albeiroval
Posts: 400
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Subir y descargar archivos en una FTP

Post by albeiroval »

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
User avatar
sysctrl2
Posts: 1144
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Re: Subir y descargar archivos en una FTP

Post by sysctrl2 »

Albeiro, funciona de Maravilla,
gracias por desarrollar el wrapper para harbour
ya te envié una aportación !!!!
saludos !!!

Code: Select all | Expand

#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 "
User avatar
albeiroval
Posts: 400
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Subir y descargar archivos en una FTP

Post by albeiroval »

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
Post Reply