Barra de progresso de download com TIPClientFTP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Barra de progresso de download com TIPClientFTP

Mensagem por asimoes »

Pessoal,

Tem algum exemplo de barra de progresso de download com TIPClientFTP() ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Barra de progresso de download com TIPClientFTP

Mensagem 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()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Barra de progresso de download com TIPClientFTP

Mensagem 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?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Barra de progresso de download com TIPClientFTP

Mensagem por asimoes »

Acho que descobri.

nConnTimeout estava com 2000 passe para 20000
oFTP:nConnTimeout :=2000
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Barra de progresso de download com TIPClientFTP

Mensagem por asimoes »

Tem como saber o tamanho de um arquivo no ftp antes de baixar?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Barra de progresso de download com TIPClientFTP

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Barra de progresso de download com TIPClientFTP

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Barra de progresso de download com TIPClientFTP

Mensagem 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
Anexos
tamanhoArquivo.txt
Arquivo PHP utilizado na rotina (renomeie pra PHP)
(312 Bytes) Baixado 47 vezes
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Barra de progresso de download com TIPClientFTP

Mensagem 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
Inacio de Carvalho Neto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Barra de progresso de download com TIPClientFTP

Mensagem por sygecom »

Inacio,
Você usa xharbour ou Harbour ? pode ser algum bug na lib TIP
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder