Pegar tamanho e data do arquivo com TipClientHttp()

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

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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.
Marcos Roberto
NetService Software
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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.
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/
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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...
Marcos Roberto
NetService Software
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem por marcos.gurupi »

Realmente parece simples, mas desculpe por parecer simplorio d+. Eu compilo no meu xhb? Onde eu vou executar o script ? :-))
Marcos Roberto
NetService Software
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Pegar tamanho e data do arquivo com TipClientHttp()

Mensagem por marcos.gurupi »

Limpo e cristalino, agora eu entendi. Vlw amigo!
Marcos Roberto
NetService Software
Responder