Puxar atualizacao sem FTP
Enviado: 22 Mai 2010 23:20
Eh possivel eu atualizar meus sistemas no cliente sem o uso de FTP? Caso sim. Por favor poste exemplos. Obrigado
Marcos Roberto.
Marcos Roberto.
Olá Marcos,marcos.gurupi escreveu:Eh possivel eu atualizar meus sistemas no cliente sem o uso de FTP? Caso sim. Por favor poste exemplos. Obrigado
Código: Selecionar todos
IF !FILE("res\curiosidades.doc")
DONWLOAD_FILE("/atualiza/res","curiosidades.doc","res\curiosidades.doc")
ENDIF
Código: Selecionar todos
************************************************
PROCEDURE Donwload_File(ftpdir,ftpfile,fdestino)
************************************************
Local cURL, cSaveAs, nFileSize, vALIAS, lRet:=.F.
Private oBar,oDlg,nSize, oConn
cURL := "http://www.sygecom.com.br"+ftpdir+"/"+ftpfile
Private oDlgHabla:=nil
MsgRun("Aguarde Procurando Atualizações...")
Fim_Run()
cTamanho := Get_File_Size(cURL)
TRY
oConn := TipClientHttp():New(TURL():New(cURL))
oConn:nConnTimeout := 10000
oConn:nDefaultPort := 8080
oConn:exGauge := { | done, size| ShowGauge(done, size, cTamanho, ftpfile ) }
IF oConn:Open(cURL)
oConn:ReadToFile(fdestino,,nFileSize)
oConn:Close()
ENDIF
lRet:=.T.
CATCH
MsgStop("Erro ao Tentar baixar a atualização, Favor tente mais tarde","Aviso do Sistema")
END
oDlg:Close()
Fim_Run()
RETURN(lRet)
Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
IF nSent > 0
hwg_processmessage()
eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} )
@ 50,120 say "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100,4) +" %" SIZE 500,22
ENDIF
RETURN
*****************************
Procedure Aguarde(vTIT,vMENS)
*****************************
INIT DIALOG oDlg TITLE vTIT AT 45,30 SIZE 600,210 NOEXIT STYLE DS_CENTER + WS_VISIBLE
@ 50,20 say vMENS size 300,40 ;
FONT HFont():Add( '',0,-20,400,,,)
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000
oDlg:Activate(.t.)
***************************
FUNCTION GET_FILE_SIZE(cURL)
***************************
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
Return 0
ENDIF
INetInit()
pSocket := INetConnect( oUrl:cServer, 8080 )
IF INetErrorCode( pSocket ) <> 0
// MsgInfo("Erro ao conectar ao Socket, error:" + INetErrorDesc( pSocket ),"Aviso do Sistema")
INetCleanUp()
RETURN 0
ENDIF
crlf := INETCRLF()
// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
"Host: "+oUrl:cServer+ CRLF + ;
"User-Agent: HTTP-Get-File-Size" + CRLF + ;
"Connection:close" + CRLF + ;
CRLF
nBytes := INetSend( pSocket, cRequest )
cBuffer := Space(4096)
cResponse:= ""
// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO
// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()
aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Olá Marcos,marcos.gurupi escreveu: Qual eh o servico q devo instalar no meu windows 2003 para servir meus arquivos para os clientes?
Código: Selecionar todos
************************************************
PROCEDURE Donwload_File(ftpdir,ftpfile,fdestino)
************************************************
Local cURL, cSaveAs, nFileSize, vALIAS, lRet:=.F.
Private oBar,oDlg,nSize, oConn
cURL := "http://www.sygecom.com.br"+ftpdir+"/"+ftpfile
Private oDlgHabla:=nil
MsgRun("Aguarde Procurando Atualizações...")
Fim_Run()
cTamanho := Get_File_Size(cURL)
TRY
oConn := TipClientHttp():New(TURL():New(cURL))
oConn:nConnTimeout := 10000
oConn:nDefaultPort := 8080
oConn:exGauge := { | done, size| ShowGauge(done, size, cTamanho, ftpfile ) }
IF oConn:Open(cURL)
oConn:ReadToFile(fdestino,,nFileSize)
oConn:Close()
ENDIF
lRet:=.T.
CATCH
MsgStop("Erro ao Tentar baixar a atualização, Favor tente mais tarde","Aviso do Sistema")
END
oDlg:Close()
Fim_Run()
RETURN(lRet)
Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
IF nSent > 0
hwg_processmessage()
eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} )
@ 50,120 say "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100,4) +" %" SIZE 500,22
ENDIF
RETURN
*****************************
Procedure Aguarde(vTIT,vMENS)
*****************************
INIT DIALOG oDlg TITLE vTIT AT 45,30 SIZE 600,210 NOEXIT STYLE DS_CENTER + WS_VISIBLE
@ 50,20 say vMENS size 300,40 ;
FONT HFont():Add( '',0,-20,400,,,)
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000
oDlg:Activate(.t.)
***************************
FUNCTION GET_FILE_SIZE(cURL)
***************************
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
Return 0
ENDIF
INetInit()
pSocket := INetConnect( oUrl:cServer, 8080 )
IF INetErrorCode( pSocket ) <> 0
// MsgInfo("Erro ao conectar ao Socket, error:" + INetErrorDesc( pSocket ),"Aviso do Sistema")
INetCleanUp()
RETURN 0
ENDIF
crlf := INETCRLF()
// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
"Host: "+oUrl:cServer+ CRLF + ;
"User-Agent: HTTP-Get-File-Size" + CRLF + ;
"Connection:close" + CRLF + ;
CRLF
nBytes := INetSend( pSocket, cRequest )
cBuffer := Space(4096)
cResponse:= ""
// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO
// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()
aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Sim o Endereço existe, dá tudo certo, baixa o arquivo normalmente, mas as vezes vem corrompido, e não tenho como checar os bytes por causa da função: GET_FILE_SIZE(cURL) que retorna sempre zero.sygecom escreveu: O arquivo existe no endereço da URL ? Cuidado que é case-sensitive.
Obrigado pela forçasygecom escreveu: "Unico probleminha que encontrei foi nas rotinas de FTP da TIP.LIB, na função fileSize() , mas foi apenas um detalhe que eu mesmo ajustei ,
Topico: viewtopic.php?f=4&t=9254&p=52356&hilit=xharbour+filesize#p52354