Page 1 of 1

SUBIR ARCHIVOS VIA FTP

Posted: Thu Mar 02, 2017 11:44 pm
by LuisPonce
Buenas tardes

Queria saber si existe alguna forma de subir archivos via ftp, desde nuestros sistemas

xHarbour + FiveWin

Gracias

Re: SUBIR ARCHIVOS VIA FTP

Posted: Fri Mar 03, 2017 1:09 am
by oliveiros junior
Olá Luis,

Tem uma solução do BielSys que uso há algum tempo e funciona bem para atualização via FTP. Veja no link http:/bielsys.blogspot.com.br - no titulo "actualización automática de aplicaciones via FTP". Lá você vai encontrar os fontes também.

Até mais.

Oliveiros Junior

Re: SUBIR ARCHIVOS VIA FTP

Posted: Fri Mar 03, 2017 8:03 am
by FiveWiDi
LuisPonce wrote:Buenas tardes

Queria saber si existe alguna forma de subir archivos via ftp, desde nuestros sistemas

xHarbour + FiveWin

Gracias
Si, se puede.
A ver si esta tarde te pongo la función que yo utilizo.

Re: SUBIR ARCHIVOS VIA FTP

Posted: Fri Mar 03, 2017 3:32 pm
by LuisPonce
Buenos dias

Ok, gracias

Oliveiros Junior, bajé el ejemplo updftp2.prg y .exe, al compilarlo me da un error :

┌────────────────────────────────────────────────────────────────────────────┐
│ FiveWin for xHarbour 8.02 - Feb. 2008 xHarbour development power │▄
│ (c) FiveTech, 1993-2008 for Microsoft Windows 95/98/NT/2000/ME/XP/Vista │█
└────────────────────────────────────────────────────────────────────────────┘█
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Compiling...
xHarbour Compiler build 1.1.0 (SimpLex)
Copyright 1999-2008, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'updftp2.prg' and generating preprocessed output to 'updftp2.ppo'...
updftp2.prg(28) Warning W0001 Ambiguous reference: 'ATIME'
updftp2.prg(29) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(29) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(29) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(30) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(30) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(30) Warning W0002 Ambiguous reference, assuming memvar: 'ATIME'
updftp2.prg(34) Warning W0001 Ambiguous reference: 'CTIME2'
updftp2.prg(38) Warning W0001 Ambiguous reference: 'CTIME2'
Lines 228, Functions/Procedures 5
Generating C source output to 'updftp2.c'...
Done.
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
updftp2.c:
Warning W8075 updftp2.prg 223: Suspicious pointer conversion in function HB_FUN_
RESTOFILE
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_HB_ISCHAR' referenced from C:\FWH\HIFI\UPDFT
P2.OBJ
* There are errors

C:\FWH\HIFI>

Falta al parecer una function de xharbour HB_ISCHAR




Carlos G.

Gracias Esperare a mas tarde

Re: SUBIR ARCHIVOS VIA FTP

Posted: Fri Mar 03, 2017 4:31 pm
by FiveWiDi
LuisPonce wrote:Buenas tardes

Queria saber si existe alguna forma de subir archivos via ftp, desde nuestros sistemas

xHarbour + FiveWin

Gracias
A ver que tal esta opción, yo lo uso en un bucle para subir varios ficheros (uno x uno):

Code: Select all

...    If lConectaFTP( AMPAARRA )
    
        oTdbfREbFAC:Gotop()

            While oTdbfREbFAC:Locate( , , lRest ) .and. ValType( AMPAARRA[1][1][1] ) = "O"
                lRest := .T.
                oTdbfREbFAC:Load()

                msgnowait2( AMPAARRA, "Copiant PDF anònim a FTP del rebut: " + allTrim(Str( oTdbfRebFac:Numerebu, 12, 0)) + "  -Ok: " + allTrim(Str(nOk,5,0)) + "  -Errors: " + allTrim(Str(nErrores, 5,0)), "Cancel·lar..."  + Str( nContador --, 5,0) )
            
                Traza( 1, "FTP-oTdbfRebFac:Numerebu:", oTdbfRebFac:Numerebu)
            
                //If RebutToFTP( AMPAARRA, oTdbfRebFac:Numerebu, .F. )
                If SubeFichero( AMPAARRA, cPathREBUT( AMPAARRA, .T. ) + Base10to36(oTdbfRebFac:numeRebu) + ".pdf", .F. )
                    nOk ++
                    oTdbfREbFAC:Dataaweb := DToS( Date() ) + " " + Time()
                    oTdbfREbFAC:Save()
                  Else
                    nErrores ++
                    GenError( 3, GetTrad("Error al copiar el rebut:" ) + Str( oTdbfRebFac:Numerebu, 10, 0 ) + "-" + Base10to36(oTdbfRebFac:numeRebu) + ".pdf")
                    //AADD( aFTPError, oTdbfRebFac:Numerebu)
                    Traza2( cFileLog, CRLF + DToS( Date() ) + "_" + Left(StrTran( Time(), ":" ), 6) + "-" + GetTrad("Error al copiar el rebut:" ) + Str( oTdbfRebFac:Numerebu, 10, 0 ) + "-" + Base10to36(oTdbfRebFac:numeRebu) + ".pdf")
                EndIf
                SysRefresh()
            
            End
                
        CierraFTP()
    EndIf...
La función que realiza la 'subida' por FTP está en este código:

Code: Select all

/*----------------------------------------------------------------------------------------*/
* Basado en el siguiente trabajo:                                                         *
* ===============================                                                         *
/*----------------------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------------------*/
*                                                                                         *
*        Archivo: Proc9991.PRG                                                            *
*    Descripcion: Subir ficheros del servidor FTP                                         *
*          Fecha: 11-03-2012                                                              *
*          Autor: Jose Javier LLoris Roig                                                 *
*            Web: http://javierlloris.blogspot.com.es/                                    *
*            Msn: fwh-jll@hotmail.es                                                      *
*                                                                                         *
*       Libreria: FWH/FWHX 11.09                                                          *
*        Harbour: Harbour 5.8.2 release 20120330                                          *
*     Compilador: Borland C++ 5.8.2                                                       *
*            S.O: XP/Win7 no probado en otros S.O                                         *
*                                                                                         *
*    Copyright (C) 2012 José Javier Lloris Roig                                           *
*    Correo electrónico: fwh-jll@hotmail.es                                               *
*    Web: http://javierlloris.blogspot.com.es/                                            *
*                                                                                         *
*    Este programa es software libre: usted puede redistribuirlo y/o modificarlo bajo los *
*    términos de la Licencia Pública General GNU publicada por la Fundación para el       *
*    Software Libre, ya sea la versión 3 de la Licencia, o (a su elección) cualquier      *
*    versión posterior.                                                                   *
*                                                                                         *
*    Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA      *
*    ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD PARA UN PROPÓSITO   *
*    DETERMINADO.                                                                         *
*                                                                                         *
*    Consulte los detalles de la Licencia Pública General GNU para obtener una información*
*    más detallada.                                                                       *
*                                                                                         *
*    Debería haber recibido una copia de la Licencia Pública General GNU                  *
*    junto a este programa. En caso contrario, consulte http://www.gnu.org/licenses.      *
/*----------------------------------------------------------------------------------------*/

#Include "FiveWin.CH"

STATIC oFTP
STATIC lFTP := .F.
STATIC aFiles
STATIC nSizeFiles

/*------------------------------------------------------------------------------*/
FUNCTION oGetoFTP()
Return oFTP
/*------------------------------------------------------------------------------*/
FUNCTION lIsOpenFTP()
Return lFTP
/*------------------------------------------------------------------------------*/
Function CierraFTP()
Traza( 1, "CierraFTP()" )

If lIsOpenFTP()
    oFTP:Close()
EndIf

DeleteObject( oFTP )
oFTP := NIL
lFTP := .F.

Return Nil
/*------------------------------------------------------------------------------*/
Function lConectaFTP( AMPAARRA )
/*------------------------------------------------------------------------------*/
Local lOk   := .F.

Local cPasswordFTP := RTrim( AMPAarra[2][3][1][19] ) + Space(25)


// comprobamos si tenemos conexion a internet
IF !IsInternet()
    MsgAlert( "Compruebe la conexión a Internet.", "Atención" )
    Return (lFTP := .F.)
END
   
aFiles     := {}
nSizeFiles := 0

/* Comprobamos que en la BD Ftp.DBF estan los datos introducidos para poder */
/* acceder al servidor FTP                                                  */
IF EMPTY( AMPAarra[2][3][1][17] ) .OR.; // Nombre del servidor FTP
   EMPTY( AMPAarra[2][3][1][18] ) .OR.; // Nombre del usuario FTP
   EMPTY( AMPAarra[2][3][1][19] ) .OR.; // Password del usuario del FTP
   EMPTY( AMPAarra[2][3][1][20] )       // Nombre de la carpeta destino en el servidor FTP

    MsgAlert( "Debe de configurar el programa para poder"      +CRLF+;
              "acceder al servidor FTP. Entre en el apartado"  +CRLF+;
              "Configurar programa y introduzca la información"+CRLF+;
              "requerida y vuelva a intentarlo."               +CRLF+CRLF+;
              "Pulse el boton de aceptar para continuar.", "ERROR!!" )
    Return (lFTP := .F.)

END

MsgGet( GetTrad("Atenció!"), RTrim( AMPAarra[2][3][1][17] ) + "-" + RTrim( AMPAarra[2][3][1][18] ) + "-" + GetTrad("Indiqui el Password:"), @cPasswordFTP )
   
Traza( 1, "RTrim( AMPAarra[2][3][1][17] )=", RTrim( AMPAarra[2][3][1][17] ) )
Traza( 1, "RTrim( AMPAarra[2][3][1][18] )=", RTrim( AMPAarra[2][3][1][18] ) )
Traza( 1, "cPasswordFTP=", cPasswordFTP )
Traza( 1, "AMPAarra[2][3][1][20]=", AMPAarra[2][3][1][20] )
Traza( 1, "AMPAarra[2][3][1][21]=", AMPAarra[2][3][1][21] )
Traza( 1, "AMPAarra[2][3][1][22]=", AMPAarra[2][3][1][22] )
Traza( 1, "AMPAarra[2][3][1][23]=", AMPAarra[2][3][1][23] )
   
MsgRun( "Conectando con el servidor FTP",;
        "Espere por Favor..."           ,;
        { || oFtp := ServicesFTP():New( RTrim( AMPAarra[2][3][1][17] ) ,; // Servidor
                                        RTrim( AMPAarra[2][3][1][18] ) ,; // Usuario
                                        AllTrim(cPasswordFTP)         , ;    // RTrim( AMPAarra[2][3][1][19] ) ,; // Contraseña
                                        AMPAarra[2][3][1][21]          ,; // Permitir anonimos
                                        AMPAarra[2][3][1][22]          ,; // Tiempo de respuesta
                                        AMPAarra[2][3][1][23]         )}) // Puerto
SysRefresh()

IF (lOk := (oFtp:nError == 0))
    Traza( 1, "a-oFtp:GetPath()=", oFtp:GetPath() )

    /* Aqueta funció és molt important per que a més a més de carregar
       fitxers en la array 'aFiles', es situa en el directori de FPT.
       ------------------------------------------------------------ */
    CargaFiles( RTrim( AMPAarra[2][3][1][20] ) )

    Traza( 1, "Connectat!!!" )
    Traza( 1, "b-oFtp:GetPath()=", oFtp:GetPath() )
END

Traza( 1, "oFtp:nError:", oFtp:nError ) 
Traza( 1, "lOk=", lOk )

Return ( lFTP := lOk )
/*------------------------------------------------------------------------------*/
Function SubeFichero( AMPAARRA, cFile, lMensaje )
/*------------------------------------------------------------------------------*/

/* Esta función puede usarse sola (directamente), con lo cual en ella se
   realiza la conexión a FTP, o precedida del uso de lConectaFTP() y poscedida de
   CierraFTP(), y en ese caso no se realizará la conexión a FTP en esta función ya que
   se habrá realizado previamente en lConectaFTP().
   Para controlar esta situación se usa la variable lConectadoFTPenSubefichero .
   -------------------------------------------------------------------------------- */
Local lConectadoFTPenSubefichero := .F.

LOCAL cFilePut  := ""
LOCAL cDirBack  := ""
LOCAL lSubido   := .F.

Traza( 1, "lFTP=", lFTP)
Traza( 1, "cFile=", cFile )
Traza( 1, "ValType(oFTP)=", ValType(oFTP) )

//If .Not. lFTP
If .Not. lIsOpenFTP()
    If .Not. lConectaFTP( AMPAARRA )
        Return .F.
    EndIf
    lConectadoFTPenSubefichero := .T.
EndIf

cDirBack := oFtp:GetPath()

oFtp:oFtp:Cwd( oFtp:GetPath() )

Traza( 1, "oFtp:oFtp:Cwd( oFtp:GetPath() )" )

IF !Empty( cFile )

    /* Buscamos si ya existe el fichero en el servidor ftp */
    IF AScan( aFiles, { | aFile | Lower( aFile[1] ) == Lower( cFileNoPath( cFile ) ) } ) > 0

        IF MsgNoYes( "Archivo: " + Lower( cFileNoPath( cFile ) ) + CRLF + CRLF + ;
                     "El fichero ya existe en su sitio FTP." + CRLF + CRLF + ;
                     "¿ Desea reemplazarlo ? ", "Seleccione..." )

            /* Borramos el fichero */
            IF !oFtp:oFtp:Dele( RTrim( cFileNoPath( cFile ) ) )

                MsgAlert( "Archivo: " + RTrim( Lower( cFileNoPath( cFile ) ) ) + CRLF + CRLF + ;
                          "No se ha podido eliminar el archivo." + CRLF + CRLF + ;
                          "Pulse el boton Aceptar para continuar.", "ERROR!!" )
                If lConectadoFTPenSubefichero
                    Traza( 1, "No es pot esborrar." )
                    CierraFTP()
                Endif
                Return( lSubido )
            END
          ELSE
            If lConectadoFTPenSubefichero
                Traza( 1, "No es còpia i es tanca." )
                CierraFTP()
            Endif
            Return( lSubido )
        END
    END
END

MsgRun( "Subiendo el archivo: " + Lower( RTrim( cFileNoPath( cFile ) ) )             ,;
        "Servidor Ftp: " + RTrim( AMPAarra[2][3][1][17]) + " Usuario: " + RTrim( AMPAarra[2][3][1][18] ),;
        { || cFilePut := oFtp:oFtp:MPut( cFile, oFtp:GetPath() )})

SysRefresh()

Traza( 1, "cFilePut=", cFilePut)

IF Empty( cFilePut )

    lSubido  := .F.

    If lMensaje
        MsgAlert( "Archivo: " + Lower( cFileNoPath( cFile ) )                + CRLF + CRLF + ;
                  "El archivo no se ha podido subir a su sitio FTP. Consulte"+ CRLF + ;
                  "con su administrador de sistemas o ISP los permisos"      + CRLF + ;
                  "de escritura de su sitio FTP."                            + CRLF + CRLF + ;
                  "Pulse el boton Aceptar para continuar.", "ERROR!!" )

    EndIf
    
  ELSE

    lSubido  := .T.

    If lMensaje
        MsgInfo( "Ruta de acceso remoto predeterminado: " + oFtp:GetPath() + CRLF + ;
                 "Archivo: " + Lower( cFileNoPath( cFile ) )               + CRLF + CRLF + ;
                 "El archivo se ha subido correctamente a su sitio FTP."   + CRLF + CRLF + ;
                 "Pulse el boton Aceptar para continuar." )
    EndIf
END

If lConectadoFTPenSubefichero
    Traza( 1, "Al final" )
    CierraFTP()
Endif

If lsubido
  Else
    Inkey(1)
EndIf

Return( lSubido )
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/
STATIC Function CargaFiles( cPath )
/*------------------------------------------------------------------------------*/

   DEFAULT cPath := "/"

   aFiles     := oFtp:ScrollDir( If( cPath == "/", "/", ( RTrim( cPath ) + "/" ) ) )
   nSizeFiles := oFtp:nSizeFiles

Return NIL

Re: SUBIR ARCHIVOS VIA FTP

Posted: Mon Mar 06, 2017 6:57 am
by LuisPonce
Hola Carlos G.

Muchas gracias por el alcance, no pude hacerlo funcionar, me da este error al momento de compilar/enlazar

echo c:\xharbour\lib\ct.lib + >> b32.bc
echo c:\xharbour\lib\pp.lib + >> b32.bc
echo c:\xharbour\lib\pcrepos.lib + >> b32.bc
echo c:\xharbour\lib\hbzip.lib + >> b32.bc
echo c:\xharbour\lib\zlib.lib + >> b32.bc
rem Uncomment these two lines to use Advantage RDD
rem echo c:\xHarbour\lib\rddads.lib + >> b32.bc
rem echo c:\xHarbour\lib\Ace32.lib + >> b32.bc
echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib, >> b32.bc
IF EXIST %1.res echo %1.res >> b32.bc
c:\bcc55\bin\ilink32 -Gn -aa -Tpe -s -v @b32.bc
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_GETTRAD' referenced from C:\F
0299.OBJ
Error: Unresolved external '_HB_FUN_SERVICESFTP' referenced from
\VT20299.OBJ

Me pide las funciones GETTRAD y SERVICESFTP como verás, llegue a la pagina de Jose Javier LLoris Roig, baje el hbrtl.lib y al parecer la libreria es para Harbour y no para xHarbour ....ademas necesita la hbtip.lib según leí en el foro.

http://fivetechsupport.com/forums/viewt ... 34&start=0

Existe la libreria para xHarbour?

Gracias


Att.
Luis Ponce
Mollendo-Perú

Re: SUBIR ARCHIVOS VIA FTP

Posted: Mon Mar 06, 2017 11:15 am
by FiveWiDi
No había tenido en cuenta que trabajas con xHarbour; lo siento.

Re: SUBIR ARCHIVOS VIA FTP

Posted: Mon Mar 06, 2017 4:36 pm
by LuisPonce
Buenos dias

Gracias Carlos G. por las respuestas, creo que tengo una luz al final del tunel, encontre una libreria...

Una consulta mas:

si quisiera subir el archivo cFile:="elfile.pdf" a la carpeta "\PDFS_SELF" (fuera de la public_html) de mi servidor fpt, cual es la sintaxis que debo aplicar para indicarle a que carpeta deseo llevar el cFile ?¿

Gracias

Re: SUBIR ARCHIVOS VIA FTP

Posted: Mon Mar 06, 2017 10:11 pm
by FiveWiDi
LuisPonce wrote:Buenos dias

Gracias Carlos G. por las respuestas, creo que tengo una luz al final del tunel, encontre una libreria...

Una consulta mas:

si quisiera subir el archivo cFile:="elfile.pdf" a la carpeta "\PDFS_SELF" (fuera de la public_html) de mi servidor fpt, cual es la sintaxis que debo aplicar para indicarle a que carpeta deseo llevar el cFile ?¿

Gracias
/* Esta función es muy importante porque además de cargar
ficheros en la array 'aFiles', se SITÚA en el directorio de FPT.
------------------------------------------------------------ */
CargaFiles( "\PDFS_SELF" )

Es decir (lo supongo), antes de subir el archivo debes haberte posicionado en la carpeta en donde quieres subirlo.