Subir ficheros por FTP
Posted: Tue Nov 12, 2013 12:53 pm
Hola a todos,
A ver si alguien me puede ayudar porque ando perdido. Tengo que subir unos ficheros a un servidor FTP y no consigo que funcione, a lo más que llega es a crear el archivo en el servidor, pero se queda con 0 bytes de longitud. La llamada a oFile:OpenWrite() se demora más de un minuto y se queda con permisos 644 en el servidor .
Uso Harbour (no XHarbour), no se si esto tendrá algo que ver.
Saludos
Estoy intentandolo con el siguiente código que vi por aquí:
//----------------------------------------------------------------------------//
Function FTPSendFiles( cFTPSite, aSource, aTarget, cUserFtp, cPassFtp )
Local lEnd := .f.
Local nBufSize := 2000
Local oInternet, oFTP
oInternet := TInternet():New()
if Empty( oInternet:hSession )
MsgAlert( "Sin Conexión a Internet!" )
else
oFTP := TFTP():New( cFTPSite, oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp))
if Empty( oFTP:hFTP )
MsgStop( "Imposible Conectarse al Sito FTP" )
else
SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )
endif
endif
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 n
for n = 1 to Len( aSource )
hSource = FOpen( aSource[ n ] )
sysrefresh()
oFile = TFtpFile():New( aTarget[ n ], oFTP )
oFile:OpenWrite() // Esto tarda mas de un minuto ---------------------------------------------
FSeek( hSource, 0, 0 )
nFile := 0
do while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 .and. ! lEnd
oFile:Write( SubStr( cBuffer, 1, nBytes ) )
sysrefresh()
enddo
FClose( hSource )
oFile:End()
sysrefresh()
if lEnd
exit
endif
next n
Return nil
A ver si alguien me puede ayudar porque ando perdido. Tengo que subir unos ficheros a un servidor FTP y no consigo que funcione, a lo más que llega es a crear el archivo en el servidor, pero se queda con 0 bytes de longitud. La llamada a oFile:OpenWrite() se demora más de un minuto y se queda con permisos 644 en el servidor .
Uso Harbour (no XHarbour), no se si esto tendrá algo que ver.
Saludos
Estoy intentandolo con el siguiente código que vi por aquí:
//----------------------------------------------------------------------------//
Function FTPSendFiles( cFTPSite, aSource, aTarget, cUserFtp, cPassFtp )
Local lEnd := .f.
Local nBufSize := 2000
Local oInternet, oFTP
oInternet := TInternet():New()
if Empty( oInternet:hSession )
MsgAlert( "Sin Conexión a Internet!" )
else
oFTP := TFTP():New( cFTPSite, oInternet, Alltrim(cUserFtp),Alltrim(cPassFtp))
if Empty( oFTP:hFTP )
MsgStop( "Imposible Conectarse al Sito FTP" )
else
SendFiles( aSource, aTarget, nBufSize, lEnd, oFTP )
endif
endif
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 n
for n = 1 to Len( aSource )
hSource = FOpen( aSource[ n ] )
sysrefresh()
oFile = TFtpFile():New( aTarget[ n ], oFTP )
oFile:OpenWrite() // Esto tarda mas de un minuto ---------------------------------------------
FSeek( hSource, 0, 0 )
nFile := 0
do while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 .and. ! lEnd
oFile:Write( SubStr( cBuffer, 1, nBytes ) )
sysrefresh()
enddo
FClose( hSource )
oFile:End()
sysrefresh()
if lEnd
exit
endif
next n
Return nil