Sorry, I don't know.Horizon wrote:Is it possible to show progress bar (for example in message bar) while reading at ReadAll() method?
I download big files from www. Users confuse if there is a problem or not.
Patrick
Sorry, I don't know.Horizon wrote:Is it possible to show progress bar (for example in message bar) while reading at ReadAll() method?
I download big files from www. Users confuse if there is a problem or not.
.
.
.
// oProg : Progress Bar is created before
cURL := "http://www.test.be/test.txt"
cSaveAs := "newfile.txt"
nFileSize := Get_File_Size(cURL)
IF wfReadURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
ELSE
... File is not there
ENDIF
.
.
.
FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize)
LOCAL oConn, lReturn:=.T.
DEFAULT oProg := 0
IF Upper(Left(cUrl,4))#"HTTP"
cUrl:="http://"+cUrl
ENDIF
TRY
oConn := TipClientHttp():New(TURL():New(cUrl))
oConn:nConnTimeout := 20000
IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
oProg:SetRange( 0, 99 )
ENDIF
IF oConn:Open(cURL)
oConn:ReadToFile(cSaveAs,,nFileSize)
oConn:Close()
ENDIF
CATCH
lReturn := .F.
END
RETURN lReturn
function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return
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, 80 )
IF INetErrorCode( pSocket ) <> 0
? "Socket error:", INetErrorDesc( pSocket )
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
IF wfReadURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
DEFAULT oProg := 0
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
... File is there AND downloaded as cSaveAs
@ 80, 010 PROGRESS oProg POSITION 0 SIZE 212, 12 PIXEL
DEFAULT oProg := 0
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oDlg, oBtnDwn, oBtnOk
DEFINE DIALOG oDlg
@ 1, 1 BUTTON oBtnDwn PROMPT "Download" ACTION Download(oProg)
@ 2.5, 1 PROGRESS oProg POSITION 0 SIZE 100, 12
@ 3, 1 BUTTON oBtnOk PROMPT "Quit" ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTER
return nil
PROCEDURE Download
LOCAL cURL, cSaveAs, nFileSize
cURL := "http://www.fivetechsoft.com/files/utilities/prometheus.exe"
cSaveAs := "prometh.exe"
nFileSize := Get_File_Size(cURL)
IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize)
? "Downloaded" // ... File is there AND downloaded as cSaveAs
ELSE
? "Can not downloaded " //... File is not there
ENDIF
RETURN
FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize)
LOCAL oConn, lReturn:=.T.
DEFAULT oProg := NIL
DEFAULT nFileSize := 0
IF Upper(Left(cUrl,4))#"HTTP"
cUrl:="http://"+cUrl
ENDIF
TRY
oConn := TipClientHttp():New(TURL():New(cUrl))
oConn:nConnTimeout := 20000
IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
oProg:SetRange( 0, 99 )
ENDIF
IF oConn:Open(cURL)
oConn:ReadToFile(cSaveAs,,nFileSize)
oConn:Close()
ENDIF
CATCH
lReturn := .F.
END
RETURN lReturn
function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return
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, 80 )
IF INetErrorCode( pSocket ) <> 0
? "Socket error:", INetErrorDesc( pSocket )
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
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: Jimmy and 34 guests