In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

tFtp - establecer conexión con servidor Ftp

Foro de Xailer profesional en español
Responder
joseluis
Mensajes: 642
Registrado: Jue Sep 08, 2005 12:54 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por joseluis »

Hola,
¿Como se hace? He estado consultado la documentación y no he sabido ver
un método tal como sigue:
oFtp:Open( cftpUrl, cUser, cPass )
Saludos y gracias por vuestra ayuda.
José Luí­s Capel
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por jlalin »

José Luis,
aquí­ tienes un ejemplo. Está escrito al vuelo y podrí­a tener algún error
de sintaxis:
//---
FUNCTION TestFTP()
WITH OBJECT TFtp():New()
:cUser := "User"
:cPassword := "Pass"
:Create()
If :Open()
If :Connect( "ftp.miserver.com" )
//Aquí­ lo que quieras hacer
Endif
:Close()
Endif
:Destroy()
END
RETURN Nil
//---
Saludos,
José Lalí­n
joseluis
Mensajes: 642
Registrado: Jue Sep 08, 2005 12:54 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por joseluis »

José,
>
> aquí­ tienes un ejemplo. Está escrito al vuelo y podrí­a tener algún error
> de sintaxis:
>
> //---
> FUNCTION TestFTP()
>
> WITH OBJECT TFtp():New()
> :cUser := "User"
> :cPassword := "Pass"
> :Create()
>
> If :Open()
> If :Connect( "ftp.miserver.com" )
> //Aquí­ lo que quieras hacer
> Endif
> :Close()
> Endif
>
> :Destroy()
> END
>
> RETURN Nil
> //---
Muuchas gracias!!!
Tengo las siguientes dudas...
a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
que a veces tenemos que cortar la comunicación con el servidor de forma
inmediata (estando incluso en proceso de enví­o/recepción de ficheros).
Sino, haciendo un oFtp:command("ABOR") ¿serí­a suficiente?
b. El envento OnCommand no acabo de verlo claro. Según la documentación
se dispara después del enví­o de un comando (supongo que solo después
de ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
disparó? Tambien dice la documentación que hay que mirar un método
readfile para ver la respuesta del servidor ftp. No veo ese método
documentado.
c. En mi caso, tengo que hacer transferencias en ambos sentidos con
tamaños variables (a veces incluso de 1MB o más). ¿Como podrí­a tener
información del progreso de la transmisión?
d. ¿Es necesario el tener un formulario activo para utilizar la clase
tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
'commandline')
Saludos,
José Luis Capel
joseluis
Mensajes: 642
Registrado: Jue Sep 08, 2005 12:54 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por joseluis »

José,
Y una última cuestión:
¿habrí­a alguna posibilidad de volcar a un fichero tipo log 'la
conversación ftp server/client ?
Saludos y gracias,
José Luis Capel
joseluis
Mensajes: 642
Registrado: Jue Sep 08, 2005 12:54 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por joseluis »

José,
>
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del enví­o de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
>
He visto que tFtp desciende de tInternet. Ahí­ es donde está la
documentación que no veí­a.
Saludos,
José Luis Capel
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por jlalin »

José Luis,
> a. Tienes previsto implementar el comando ABORT (o similar)? El caso es
> que a veces tenemos que cortar la comunicación con el servidor de forma
> inmediata (estando incluso en proceso de enví­o/recepción de ficheros).
> Sino, haciendo un oFtp:command("ABOR") ¿serí­a suficiente?
Sí­, el método Command() sirve para enviar mandatos directamente al
servidor FTP. Lo implementé para no tener que tocar el código de la
clase para adaptarla a diferentes tipos de servidor FTP.
> b. El envento OnCommand no acabo de verlo claro. Según la documentación
> se dispara después del enví­o de un comando (supongo que solo después de
> ejecutar el oFtp:Command). Pero... ¿como se cual oFtp:command lo
> disparó? Tambien dice la documentación que hay que mirar un método
> readfile para ver la respuesta del servidor ftp. No veo ese método
> documentado.
El método Command() devuelve TRUE o FALSE para indicar si el servidor
FTP entendió el mandato, luego se lanza OnCommand si la operación tuvo
éxito.
> c. En mi caso, tengo que hacer transferencias en ambos sentidos con
> tamaños variables (a veces incluso de 1MB o más). ¿Como podrí­a tener
> información del progreso de la transmisión?
Tendrás que usar un TProgressBar y actualizar en el bucle de
lectura/escritura. Para subir un archivo serí­a algo así­:
//---
If oNet:Connect( cServer )
hFile := FOpen( "test.txt" )
If hFile > -1
hRemote := oNet:OpenFileWrite( "test.txt" )
If hRemote != 0
While lOk .AND. ( nRead := FRead( hFile, @cBuffer, nBuffer ) ) > 0
lOk := oNet:WriteFile( hRemote, @cBuffer, nRead )
//Aquí­ actualizar TProgressBar
End
Endif
oNet:CloseFile( hRemote )
FClose( hFile )
Endif
//---
NOTA: No hace falta que llames a ProcessMessages() dentro del bucle
While porque Xailer ya lo hace automáticamente.
> d. ¿Es necesario el tener un formulario activo para utilizar la clase
> tFtp? Es decir, ¿puedo utilizarlo sin crear ningún formulario? (tipo
> 'commandline')
Creo que sí­. Al hacer los tests para probar las clases recuerdo que
lanzaba el EXE del test y escribí­a la información de debug a un archivo
sin interactuar con el test hasta que terminaba. ¿ Te refieres a eso o a
tener tu aplicación funcionando y una sesión FTP en segundo plano ?
Saludos,
José Lalí­n
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

tFtp - establecer conexión con servidor Ftp

Mensaje por jlalin »

José Luis,
> ¿habrí­a alguna posibilidad de volcar a un fichero tipo log 'la
> conversación ftp server/client ?
No tengo inconveniente en implementarlo aunque también se me ocurre que
puedes derivar una clase y personalizarla a tu gusto.
//---
CLASS TFTP FROM XFTP
PUBLIC:
METHOD Connect( cServer )
METHOD Log( cStr )
ENDCLASS
METHOD Connect( cServer ) CLASS TFTP
LOCAL lOk
::Log( "Connect: " + cServer )
IF ( lOK := Super:Connect( cServer ) )
::Log( " Conectado" )
ELSE
::Log( " Error:" + Str( ::nLastError ) + ::GetErrorDescription() )
ENDIF
RETURN lOk
METHOD Log( cStr ) CLASS TFTP
DEFAULT cStr TO ""
Memowrit( "Log.txt", MemoRead( "Log.txt" ) + cStr )
RETURN Nil
//---
Como te decí­a no tengo problema en implementarlo nativamente pero
prefiero que lo decidan Jose F. o Ignacio.
Saludos,
José Lalí­n
Responder