Página 1 de 1

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 17:55
por asimoes
Pessoal,

Tem algum exemplo de barra de progresso de download com TIPClientFTP() ?

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 19:18
por JoséQuintas
Download e upload, incluindo previsão de horário.

Código: Selecionar todos

FUNCTION DownloadJpa( cSource, cTarget, Tamanho )

   LOCAL cRemotePath, cServer, cUser, cPassword, cUrl, cMsgErro
   LOCAL oUrl, oFtp, aFiles, lRetorno

   hb_Default( @Tamanho, 0 )

   cRemotePath := ""
   IF "/" $ cSource
      cRemotePath := Substr( cSource, 1, Rat( "/", cSource ) - 1 )
      cSource     := Substr( cSource, Rat( "/", cSource ) + 1 )
   ENDIF
   cServer := "ftp.xxx.com.br"
   cUser := "xxxx"
   cPassword := SenhaFtp()
   cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer
   oUrl := tUrl():New( cUrl )
   oFtp := TIPClientFtp():New( oUrl, .F. )
   oFtp:nConnTimeOut := 10000
   oFtp:bUsePasv := .T.
   oFtp:oUrl:cServer := cServer
   oFtp:oUrl:cUserId := cUser
   oFtp:oUrl:cPassword := cPassword
   lRetorno := .F.

   IF oFtp:Open( cUrl )
      oFtp:Cwd( cRemotePath )
      IF Tamanho == 0
         aFiles := oFtp:ListFiles( cSource )
         IF Len( aFiles ) > 0
            Tamanho := aFiles[ 1, 2 ]
         ENDIF
         IF Tamanho == 0
            SayScroll( "Não encontrada informação, tentando sem a informação!",, .T. )
            Tamanho := 2000000 // apenas pro grafico
         ENDIF
      ENDIF
      oFtp:exGauge := { | Pronto | GrafTempo( Pronto, Tamanho ) }
      GrafTempo( "Baixando " + cSource )
      IF oFtp:DownloadFile( cTarget, cSource )
         lRetorno := .T.
      ENDIF
      oFtp:Close()
   ELSE
      cMsgErro := "Nao conectou ao servidor"
      IF oFtp:SocketCon == NIL
         cMsgErro += ", conexão nao iniciada"
      ELSEIF hb_INetErrorCode( oFtp:SocketCon ) == 0
         cMsgErro += ", resposta do servidor " + oFtp:cReply
      ELSE
         cMsgErro += ", erro na conexão " + hb_InetErrorDesc( oFtp:SocketCon )
      ENDIF
      SayScroll( cMsgErro,, .T. )
      lRetorno := .F.
   ENDIF
   Mensagem()
   RETURN lRetorno


FUNCTION UploadJPA( cSource, cTarget, cUser )

   LOCAL cRemotePath, cMsgErro, lRetorno, Tamanho, oFtp, cServer, cPassword, cUrl, oUrl

   hb_Default( @cUser, "xxx" )
   cRemotePath := ""
   IF "/" $ cTarget
      cRemotePath := Substr( cTarget, 1, Rat( "/", cTarget ) - 1 )
      cTarget     := Substr( cTarget, Rat( "/", cTarget ) + 1 )
   ENDIF

   cServer   := "ftp.xxxx.com.br"
   cUser     := "xxx"
   cPassword := SenhaFtp()
   cUrl      := "ftp://" + cUser + ":" + cPassword + "@" + cServer

   oUrl              := tUrl():New( cUrl )
   oFTP              := tIPClientFtp():New( oUrl, .F. )
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv     := .T.
   IF At( "@", cUser ) > 0
      oFTP:oUrl:cServer   := cServer
      oFTP:oUrl:cUserID   := cUser
      oFTP:oUrl:cPassword := cPassword
   ENDIF

   lRetorno := .F.
   IF oFTP:Open( cUrl )
      IF .NOT. Empty( cRemotePath )
         oFtp:Cwd( cRemotePath )
      ENDIF
      Tamanho := fSize( cSource )
      oFtp:exGauge := { | Pronto | GrafTempo( Pronto, Tamanho ) }
      GrafTempo( "Enviando " + cSource )
      IF oFtp:UploadFile( cSource, cTarget )
         lRetorno := .T.
      ENDIF
      oFtp:Close()
   ELSE
      cMsgErro := "Não conectado ao servidor FTP"
      IF oFTP:SocketCon == NIL
         cMsgErro += ", conexão não inicializada"
      ELSEIF hb_InetErrorCode( oFTP:SocketCon ) == 0
         cMsgErro += ", resposta do servidor: " + oFTP:cReply
      ELSE
         cMsgErro += ", erro na conexão: "+ hb_InetErrorDesc( oFTP:SocketCon )
      ENDIF
      SayScroll( cMsgErro )
   ENDIF
   Mensagem()
   RETURN lRetorno
Agora que percebi...
Em inglês deveria ser com ph... rs

http://www.harbourdoc.com.br/show.asp?s ... GrafTime()

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 19:27
por asimoes
Quintas,

Obrigado pela dica,

Eu assinei o kinghost, estou tentando subir um arquivo com 60mb, só que na metade ou menos que isso para o upload, seria o timeout ou limitação de tamanho?

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 19:37
por asimoes
Acho que descobri.

nConnTimeout estava com 2000 passe para 20000
oFTP:nConnTimeout :=2000

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 20:28
por asimoes
Tem como saber o tamanho de um arquivo no ftp antes de baixar?

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 20:40
por asimoes
No ftp tem o método Size

Que não está implementado no TIPClientFTP

Link: https://en.wikipedia.org/wiki/List_of_FTP_commands

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 21:26
por JoséQuintas
Antigamente eu tinha função separada, mas atualmente não.
Olhe novamente as rotinas que vai ver o uso pra pegar o tamanho.

Sobre o kinghost, só pra lembrar, quando subi o harbour com msvc foi uns 100mb.
E o backup de meu cliente que vai pra lá... dá isso por dia.

Lembre-se que dá pra usar o explorer como cliente ftp também.

Barra de progresso de download com TIPClientFTP

Enviado: 09 Jun 2016 22:01
por fladimir
Tem um tópico sobre isto aki no fórum não me lembro qual, mas sei q usei ele pra colocar a função em PHP no servidor e ai vc chama ela pelo teu sistema e ela retorna o tamanho do arquivo etc..

Acho q foi o Leonardo q compartilhou...

segue...

Código: Selecionar todos

*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  function HTTP_PegaTamArq( cCaminho, cArq )
* retorna o tamanho de 1 arquivo existente no site q tem o c¢digo em PHP
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
	LOCAL oHTTP, cURL, nRET_BYTES := 0

   LOCAL cHTML

	if cArq == NIL
		Return nRET_BYTES
	elseif Empty( cArq )
		Return nRET_BYTES
	endif

	cCaminho := if( cCaminho == NIL, "pastadatuahospedagem/podeseroutrapastaaki/", cCaminho)
	cURL     := 'http://www.teudominio.com.br/tamanhoArquivo.php?caminho=' + cCaminho + cArq
	oHTTP:= TIpClientHttp():new( cURL )
	if oHTTP:open()
		cHTML := oHTTP:readAll()
		if !EMPTY(cHTML)
			if LEN(cHTML) > 0 .AND. LEN(cHTML) < 20
		 		nRET_BYTES:=VAL(alltrim(cHTML)) //Alert('Tamanho:' + str(nRET_BYTES) )
			endif
	 	endif
	endif
	oHTTP:close()
return nRET_BYTES
Segue em anexo arquivo PHP

Barra de progresso de download com TIPClientFTP

Enviado: 20 Jun 2016 01:35
por cjp
Caros colegas,

Sempre usei esta TIPClient, funcionando perfeitamente.

Recentemente, contudo, venho recebendo um "Error BASE/1340 Divisão por zero: /" da oFtp: UploadFile(), sem que eu tenha feito qualquer alteração no meu sistema.

Alguém saberia me dizer a razão deste erro, e como resolvê-la?

Inacio

Barra de progresso de download com TIPClientFTP

Enviado: 26 Jun 2016 23:17
por sygecom
Inacio,
Você usa xharbour ou Harbour ? pode ser algum bug na lib TIP