FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Descargando archivos via FTP
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Descargando archivos via FTP
Posted: Wed Aug 31, 2016 08: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 (fw): Select all Collapse
 聽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贸
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Descargando archivos via FTP
Posted: Wed Aug 31, 2016 07: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=6t=32829#p193100

&

Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Re: Descargando archivos via FTP
Posted: Thu Sep 01, 2016 06: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.
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Descargando archivos via FTP
Posted: Thu Sep 01, 2016 08:41 AM
Code (fw): Select all Collapse
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/
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Re: Descargando archivos via FTP
Posted: Fri Sep 02, 2016 07:34 AM
Biel, mil gracias por contestar:

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

Code (fw): Select all Collapse
 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.
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: Descargando archivos via FTP
Posted: Sat Sep 03, 2016 06: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.

Continue the discussion