Página 1 de 1

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 14:54
por marcos.gurupi
Estudando a funcao TipClientHttp() e a funcao TipClientFTP(), fica claro que a funcao TipClientHttp() eh bem mais simples baixar arquivos, incluive nao tem limites de usuarios como geralmente tem os servidores FTP, mas esbarrei quando eu precisei da data e o tamanho do arquivo para efim comparar com o atual e atualizar. Alguem sabe como eu poderia pegar o tamanho (antes de baixar eh claro) e a data do arquivo?

Eu estou usando assim:

Código: Selecionar todos

Function BaixarHTTP(opc)

local oHttp, oExe, oEmpresa, oExecutavel, oUrl, oTamanho, oProgress
Local cTamanho
 
if Os_IsWinNT()
   ShowNotifyInfo(oMainWindow:handle ,.F.,NIL, NIL,"","")
   ShowNotifyInfo(oMainWindow:handle ,.T.,NIL, NIL,"Baixando atualizacao para o sistema. Aguarde...","Baixando...")
Else
   MsgRun("Baixando atualizacao para o sistema. Aguarde...")
endif
 
oEmpresa:= TiraCaractere(vCNPJ)
iF OPC=1
   oExecutavel:= "managernet.exe"
ElseIf opc=2
   oExecutavel:= "pdvnet.exe"
Endif   
oUrl := "http://www.meusite.com.br/Clientes/"+oEmpresa+"/"+oExecutavel
oHttp:= TipClientHttp():New(TURL():New(oURL)) 
oHttp:open()
cArq:=oHttp:oUrl:cFile 
oHttp:ReadToFile(cArq) 
oHttp:Close() 
IF FILE(oExecutavel) 
   cCONFERE:=MEMOREAD(oExecutavel) 
	IF AT('<html>',cCONFERE)>0 .AND. AT('</html>',cCONFERE)>0 
		IF AT('404 Not Found',cCONFERE)>0
			FERASE(oExecutavel) // EXCLUI POR BAIXOU COM PROBLEMA 
         if Os_IsWinNT()
            ShowNotifyInfo(oMainWindow:handle ,.F.,NIL, NIL,"","")
            ShowNotifyInfo(oMainWindow:handle ,.T.,NIL, NIL,"Nao existe atualizacao disponivel.","Atualizacao.")
            Inkey(3)
            ShowNotifyInfo(oMainWindow:handle ,.F.,NIL, NIL,"","")
			Else
            MsgRun("Nao existe atualizacao disponivel.",2000)
         endif
			lRet:=.F. 
      ENDIF 
	Endif
Endif
if Os_IsWinNT()
   ShowNotifyInfo(oMainWindow:handle ,.F.,NIL, NIL,"","")
Else
   Fim_Run()
endif
Return .T.

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 15:20
por Itamar M. Lins Jr.
A solução pode ser; no próprio nome do arquivo colocar a versão.
managernet.exe_1.0

Saudações,
Itamar M. Lins Jr.

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 15:29
por JoséQuintas
eu uso um arquivo auxiliar, contendo tamanho e crc32.
Primeiro baixo o auxiliar pra pegar as informações, e depois o EXE e confiro se bate com o que está indicado no auxiliar.
Isso já me livrou de muitos problemas, incluindo problemas do windows.

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 15:55
por marcos.gurupi
Obrigado a todos. Como nao tem jeito de um modo mais profissional, vou criar um arquivo auxiliar, um TXT com a data e tamanho do arquivo vai resolver...

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 17:38
por Itamar M. Lins Jr.
O que falta são exemplos porque olhando nos testes dos fontes tem.
exGauge //faz a barra de progresso

Código: Selecionar todos

    oClient := TIPClientHTTP():new( oUrl )

   IF Empty( oClient )
      @ 4, 5 SAY "Invalid url " + cUrl
      Terminate()
   ENDIF

   oClient:nConnTimeout := 2000 /* := 20000 */

   IF oClient:Open()

            IF oClient:ReadToFile( cFile )

    IF oClient:nAccessMode == TIP_WO .OR. ( oClient:nAccessMode == TIP_RW .AND. bWrite )
         oClient:exGauge := {| done, size | ShowGauge( done, size ) }

PROCEDURE ShowGauge( nSent, nSize )

   @ 6, 5 SAY "Sending: " + Replicate( hb_UTF8ToStr( "░" ), 60 )
   /* nSent may be zero */
   IF nSent > 0
      @ 6, 14 SAY Replicate( hb_UTF8ToStr( "█" ), 60 * nSent / nSize )
   ENDIF

   RETURN
Saudações,
Itamar M. Lins Jr.

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 19:07
por sygecom
Marcos,
Quem não tem cão caça com Gato, aqui fizemos em PHP um script que devolve isso para nosso sistema, veja como fica:

...
...
...
oHttp:= TIpClientHttp():new( "http://www.sygecom.com.br/update/tamanh ... istema.zip)
...
...
...
sendo que: update/sistema/binario/sistema.zip é o caminho do arquivo lá no servidor que quero saber o tamanho dele.

Segue abaixo o tamanhoArquivo.php:

Código: Selecionar todos

<?php
function obterTamanho($url){
	
	if(file_exists($url)){ //SE O ARQUIVO EXISTE
		$tamanho = filesize($url);

		return $tamanho;
	}
	else{
		return 'Arquivo não encontrado';
	}
}
?>

<?php
	if(isset($_GET['caminho'])){
		$caminho = $_GET['caminho'];
		
		echo obterTamanho($caminho);
	}
?>
Você pode alterar esse script acima para lhe retornar a data, hora, tamanho e etc...simples de mais.

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 03 Mai 2013 20:24
por marcos.gurupi
Realmente parece simples, mas desculpe por parecer simplorio d+. Eu compilo no meu xhb? Onde eu vou executar o script ? :-))

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 08 Mai 2013 21:58
por sygecom
Olá Marcos,
Desculpa, acho que não fui bem claro.
Pegue esse código em PHP que postei e salve em um arquivo chamado: tamanhoArquivo.php

Depois sobe esse arquivo tamanhoArquivo.php para o seu site, ai você vai ter o seguinte caminho no seu site:
www.seusite.com.br/tamanhoArquivo.php

Depois de feito esse passo, agora qualquer arquivo no seu site você vai conseguir pegar o tamanho dele(esse meu exemplo é apenas para o tamanho).

Digamos que você subiu pelo FTP um arquivo chamado sistema.zip para dentro da pasta: sistemas no seu site, então para pegar o tamanho do arquivo ficaria assim:

Código: Selecionar todos

oHttp:= TIpClientHttp():new( "http://www.seusite.com.br/tamanhoArquivo.php?caminho=sistemas/sistema.zip)
IF oHttp:open()
   cHtml   := oHttp:readAll()
   IF !EMPTY(cHtml)
      IF LEN(cHTML) > 0 .AND. LEN(cHTML) < 20
         nRET_BYTS:=VAL(alltrim(cHTML))
         Alert('Tamanho:' + str(nRET_BYTS) )
      ENDIF
   ENDIF
ENDIF
oHttp:close()
Nota: Para você alterar o código PHP para pegar a data e hora do arquivo, de uma olha no link abaixo:
http://www.php.net/manual/pt_BR/function.stat.php

Pegar tamanho e data do arquivo com TipClientHttp()

Enviado: 09 Mai 2013 10:19
por marcos.gurupi
Limpo e cristalino, agora eu entendi. Vlw amigo!