Descargando archivos via FTP

Descargando archivos via FTP

Postby Loren » Wed Aug 31, 2016 8:25 am

compañeros, buenas:

Tengo la necesidad de descargar desde mi aplicación archivos de un servidor via FTP. El código está escrito desde hace 1 año y funcionando (o al menos eso pensaba), pero observo que aleatoriamente hay veces que descarga el archivo con 0kb y por supuesto, al abrirlo, me genera error.
¿Por qué?... Es problema del código? Es problema del servidor?

Gracias.


Code: Select all  Expand view
 oInternet:=tinternet():New()
  sysrefresh()
  oFtp     :=tFtp():New(cServer,oInternet,cUser,cPass)
  if !Empty( oFtp:hFtp )
   aFiles :=oFtp:Directory(lower(ALLTRIM(actual_CA)+'/*.'+cextension)) && CUIDADO: Se tiene en cuenta las MAYUSC/minusc
   if Len(aFiles)>0
     SndPlaySound( ".\alarma.wav" )
     oText:SetText('Descargando archivo... espere...')
     GetFileT( (ALLTRIM(actual_CA)+'/'+carchivo),aFiles[nposi,2],oFtp,carchivo,oText,oDlgj) && descargando archivo con la información de las novedades de la nueva versión a instalar
     if file(camino+"\"+carchivo)
      CURSORARROW()
      ShellExecute(,"
open",camino+''+carchivo)
     endif
   endif
 endif

....

FUNCTION GetFileT( cSource,nSize,oFtp,cnamefile,oText,oDlguu ) && para descargar el archivo TXT
   LOCAL oFile, hTarget, lValRet:=.F.
   LOCAL nBufSize,cBuffer,nBytes, nTotal:=0,nFile:=0
   nBufSize:=4096
   cBuffer:=Space(nBufSize)
   hTarget := FCreate(camino+''+cnamefile)
   oFile := tFtpFile():New( cSource, oFtp )
   oFile:OpenRead()
   WHILE  ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0
      FWrite( hTarget, cBuffer, nBytes )
      nTotal+=nBytes
      oMeter:Set( nTotal )
      SysRefresh()
   END
   FClose( hTarget )
   oFile:End()
RETURN nTotal==nSize


NOTA: código obtenido siguiendo las instrucciones de nuestro compañero BIEL Maimó
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Descargando archivos via FTP

Postby Verhoven » Wed Aug 31, 2016 7:14 pm

Te pongo el hilo anterior con el mismo problema aunque no se terminó de obtener una explicación a ese problema. Y eso que en mi caso utilizo el propio FTP del sistema operativo de Windows.
viewtopic.php?f=6&t=32829#p193100
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Descargando archivos via FTP

Postby Loren » Thu Sep 01, 2016 6:46 am

Buenos días:

Los técnicos de mantenimiento del servidor me responden escuetamente informándome de los siguiente:

"Recuerda que la conexión la debes realizar en modo pasivo y sin utilizar ningún tipo de encryptación ni TLS"

Leyendo en otros foros sobre conexiones FTP, obtengo como conclusión que el problema está en la conexión, que debe hacerse en "modo pasivo".

Ahora, la duda está en "como hago una conexión en modo pasivo" ??

Mil gracias!

Un saludo.
LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Descargando archivos via FTP

Postby Biel EA6DD » Thu Sep 01, 2016 8:41 am

Code: Select all  Expand view
HINTERNET InternetConnect(
  _In_ HINTERNET     hInternet,
  _In_ LPCTSTR       lpszServerName,
  _In_ INTERNET_PORT nServerPort,
  _In_ LPCTSTR       lpszUsername,
  _In_ LPCTSTR       lpszPassword,
  _In_ DWORD         dwService,
  _In_ DWORD         dwFlags,
  _In_ DWORD_PTR     dwContext
);


dwFlags [in]
Options specific to the service used. If dwService is INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE causes the application to use passive FTP semantics.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Descargando archivos via FTP

Postby Loren » Fri Sep 02, 2016 7:34 am

Biel, mil gracias por contestar:

Busqué en foros y google y encontré la forma de conectar:

Code: Select all  Expand view
hWinINet    := WinINet()
oInternet   := InternetOpen( "Anystring", 1, 0, 0, 0 )
if hConnect := InternetConnect( oInternet, cServer, 21, cUser, cPass, 1, 0, 0 ) ==0  && primer 0=puerto (21), 1, 2, 0
 msginfo('NO puedo conectar a '+cServer) ; return
endif
cnom:='Publicomercios.bmp'
cSource=(ALLTRIM(actual_CA)+cnom)
hSource = FTPOPENFILE( hConnect, cSource , 2147483648, 0, 0 )
hDest = FCREATE( camino+cnom )
do while .t.
  nRead = INTERNETREADFILE( hSource, @cData )
  if nRead = -1
     msginfo( "Download error" )
     exit
  endif
  if nRead = 0
     msginfo( "Download OK" )
     exit
  endif
  FWRITE( hDest, cData, nRead )
enddo
if file(camino+cnom)
  msginfo('filesize: '+str(FileSize(camino+cnom)))
 else
  msginfo('En PC NO encuentro el archivo '+cnom)
ENDIF
INTERNETCLOSEHANDLE( hSource )
INTERNETCLOSEHANDLE( hConnect )
INTERNETCLOSEHANDLE( oInternet )
...
...


DLL32 FUNCTION InternetOpen( cApp as LPSTR, n1 AS DWORD, n2 AS LPSTR, n3 AS LPSTR,;
                             n4 AS DWORD ) AS LONG PASCAL ;
                             FROM "InternetOpenA" LIB hWinINet

DLL32 FUNCTION InternetConnect( hSession AS LONG, cHost AS LPSTR, nPort AS LONG,;
                                cUserName AS LPSTR, cPassword AS LPSTR, n4 AS LONG, n5 AS LONG,;
                                n6 AS LONG ) AS LONG PASCAL ;
                                FROM "InternetConnectA" LIB hWinINet


Conecto bien!!... y aparentemente descarga, pero me lo descarga igual, vacio, con 0kb. :( :( :(

¿Algún alma caritativa?

Mil gracias. LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Descargando archivos via FTP

Postby Verhoven » Sat Sep 03, 2016 6:24 am

Yo probaría con un cliente ftp como filezilla o el propio que trae el sistema operativo para ver si te da el mismo fallo. Eso te ayudará a ir descartando posibilidades. Y a probar configuraciones distintas del modo de bajada de archivos hasta que des con la solución.
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 96 guests