Does someone have an example of a FTP file upload function with progressbar.
Thanks in advance
Otto
Static FUNCTION Send( cCarpeta )
LOCAL aFiles
LOCAL n
LOCAL cUrl
LOCAL cStr
LOCAL lRetorno := .T.
LOCAL oUrl
LOCAL oFTP
LOCAL cUser
LOCAL cServer
LOCAL cPassword
LOCAL cFile := ""
LOCAL lElim
DEFAULT lElim TO .F.
cServer := "ftp.forteens.com.br" //change ftpserver to the real name or ip of your ftp server
cUser := "forteens" // change ftpuser to an valid user on ftpserer
cPassword := "barbara2005" // change ftppass to an valid password for ftpuser
cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer
// Leemos ficheros a enviar
aFiles := Directory( cCarpeta )
IF Len( aFiles ) > 0
oUrl := tUrl():New( cUrl )
oFTP := tIPClientFtp():New( oUrl, .T. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
// Comprobamos si el usuario contiene una @ para forzar el userid
IF At( "@", cUser ) > 0
oFTP:oUrl:cServer := cServer
oFTP:oUrl:cUserID := cUser
oFTP:oUrl:cPassword := cPassword
ENDIF
// function for displaying progress bar
oFtp:exGauge := ( @FtpProgress() )
IF oFTP:Open( cUrl )
arq:=alltrim(arq)
IF !oFtp:UploadFile( arq )
lRetorno := .F.
ELSE
lRetorno := .t.
ENDIF
oFTP:Close()
if lRetorno
msgalert( "Enviado com sucesso !" ,"OK")
else
msgstop( "Falha no Envio !" ,"ERRO")
endif
ELSE
cStr := "NÆo consegui conectar com o servidor FTP" + " " + oURL:cServer
IF oFTP:SocketCon == NIL
cStr += Chr( 13 ) + Chr( 10 ) + "ConexÆo nÆo inicializada"
ELSEIF InetErrorCode( oFTP:SocketCon ) == 0
cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do servidor:" + " "+ oFTP:cReply
ELSE
cStr += Chr( 13 ) + Chr( 10 ) + "Erro na conexÆo:" + " " +InetErrorDesc( oFTP:SocketCon )
ENDIF
msgstop( oemtoansi(cStr),"ERRO")
ENDIF
ENDIF
RETURN nil
// Displays a progress bar during file upload/download
STATIC FUNCTION FtpProgress( nSent, nTotal, oFtp )
LOCAL cProgress
cProgress := Int( 100*nSent/nTotal )
ometer:set(cProgress )
os1:settext(oFtp:oUrl:cFile)
RETURN .T.
**************************************************
Function Inicia_Progress(fdestino,wTotal,ftpfile,oftp)
*************************************************
local vol
oFtp:exGauge := { | done, size| ShowGauge(done, size, wTotal, ftpfile ) }
if !oFtp:DownLoadFile(fdestino)
vol:=.f.
else
vol:=.t.
endif
return vol
****************************************************
Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
****************************************************
IF nSent > 0
* os1:settext( "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100,4) +" %" )
cProgress := Int( (nSent/wTotal)*100 )
ometer:set(cProgress )
os1:settext(ftpfile)
ENDIF
RETURN
/*
Purpose: FTP Upload w/ progress meter
Date: Sat Oct 25, 2008 9:07 am
Author: Enrico Maria Giordano
*/
//--------------------------------------------------------------------------------
#include "Fivewin.ch"
//
// File attributes
//
#define FILE_ATTRIBUTE_READONLY 1
#define FILE_ATTRIBUTE_HIDDEN 2
#define FILE_ATTRIBUTE_SYSTEM 4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE 32
#define FILE_ATTRIBUTE_NORMAL 128
#define FILE_ATTRIBUTE_TEMPORARY 256
//
// access types for InternetOpen()
//
#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
//
// manifests
//
#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default
#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "
#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "
#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "
#define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.
//
// service types for InternetConnect()
//
#define INTERNET_SERVICE_FTP 1
#define INTERNET_SERVICE_GOPHER 2
#define INTERNET_SERVICE_HTTP 3
//
// flags for FTP
//
#define INTERNET_FLAG_TRANSFER_ASCII 1
#define INTERNET_FLAG_TRANSFER_BINARY 2
//
// file access types
//
#define GENERIC_READ 2147483648
#define GENERIC_WRITE 1073741824
FUNCTION MAIN()
LOCAL oDlg, oPrg
DEFINE DIALOG oDlg
@ 2, 2 PROGRESS oPrg;
SIZE 100, 15
@ 3, 2 BUTTON "FTP download";
ACTION DOWNLOAD( oPrg )
ACTIVATE DIALOG oDlg;
CENTER
RETURN NIL
STATIC FUNCTION DOWNLOAD( oPrg )
LOCAL hInternet, hConnect, hSource, hDest, nRead
LOCAL cData := SPACE( 1024 )
LOCAL nPos := 0
hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
hConnect = INTERNETCONNECT( hInternet, "myftpaddress", INTERNET_INVALID_PORT_NUMBER, "myuserid", "mypassword", INTERNET_SERVICE_FTP, 0, 0 )
hDest = FTPOPENFILE( hConnect, "/emagsoftware.it/test/atest.prg", GENERIC_WRITE, 0, 0 )
oPrg:SetPos( 0 )
oPrg:SetRange( 0, FSIZE( "FTPWRITEFILE.PRG" ) )
hSource = FOPEN( "FTPWRITEFILE.PRG" )
WHILE .T.
nRead = FREAD( hSource, @cData, LEN( cData ) )
IF nRead = 0
IF FERROR() = 0
? "Upload OK"
ELSE
? "Read error"
ENDIF
EXIT
ENDIF
IF !INTERNETWRITEFILE( hDest, @cData, nRead )
? "Upload error"
EXIT
ENDIF
nPos += LEN( cData )
oPrg:SetPos( nPos )
ENDDO
FCLOSE( hSource )
INTERNETCLOSEHANDLE( hSource )
INTERNETCLOSEHANDLE( hConnect )
INTERNETCLOSEHANDLE( hInternet )
RETURN NIL
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "hbapi.h"
HB_FUNC( INTERNETOPEN )
{
hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( INTERNETCLOSEHANDLE )
{
hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}
HB_FUNC( INTERNETCONNECT )
{
hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}
HB_FUNC( FTPOPENFILE )
{
hb_retnl( ( LONG ) FtpOpenFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( FTPGETFILESIZE )
{
DWORD nFileSizeHigh;
hb_retnl( ( LONG ) FtpGetFileSize( ( HINTERNET ) hb_parnl( 1 ), &nFileSizeHigh ) );
}
HB_FUNC( INTERNETREADFILE )
{
DWORD nBytesRead;
BOOL lSuccess = InternetReadFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parclen( 2 ), &nBytesRead );
if ( !lSuccess )
hb_retnl( -1 );
else
hb_retnl( nBytesRead );
}
HB_FUNC( INTERNETWRITEFILE )
{
DWORD nBytesWritten;
BOOL lSuccess = InternetWriteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), &nBytesWritten );
hb_retl( lSuccess );
}
#pragma ENDDUMP
#include "Fivewin.ch"
//
// File attributes
//
#define FILE_ATTRIBUTE_READONLY 1
#define FILE_ATTRIBUTE_HIDDEN 2
#define FILE_ATTRIBUTE_SYSTEM 4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE 32
#define FILE_ATTRIBUTE_NORMAL 128
#define FILE_ATTRIBUTE_TEMPORARY 256
//
// access types for InternetOpen()
//
#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
//
// manifests
//
#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default
#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "
#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "
#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "
#define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.
//
// service types for InternetConnect()
//
#define INTERNET_SERVICE_FTP 1
#define INTERNET_SERVICE_GOPHER 2
#define INTERNET_SERVICE_HTTP 3
//
// flags for FTP
//
#define INTERNET_FLAG_TRANSFER_ASCII 1
#define INTERNET_FLAG_TRANSFER_BINARY 2
//
// file access types
//
#define GENERIC_READ 2147483648
#define GENERIC_WRITE 1073741824
FUNCTION MAIN()
LOCAL oDlg, oPrg
DEFINE DIALOG oDlg
@ 2, 2 PROGRESS oPrg;
SIZE 100, 15
@ 3, 2 BUTTON "FTP upload";
ACTION UPLOAD( oPrg )
ACTIVATE DIALOG oDlg;
CENTER
RETURN NIL
STATIC FUNCTION UPLOAD( oPrg )
LOCAL hInternet, hConnect, hSource, hDest, nRead
LOCAL cData := SPACE( 1024 )
LOCAL nPos := 0
hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
hConnect = INTERNETCONNECT( hInternet, "myftpaddress", INTERNET_INVALID_PORT_NUMBER, "myuserid", "mypassword", INTERNET_SERVICE_FTP, 0, 0 )
hDest = FTPOPENFILE( hConnect, "/emagsoftware.it/FTPWRITEFILE.PRG", GENERIC_WRITE, 0, 0 )
oPrg:SetPos( 0 )
oPrg:SetRange( 0, FSIZE( "FTPWRITEFILE.PRG" ) )
hSource = FOPEN( "FTPWRITEFILE.PRG" )
WHILE .T.
nRead = FREAD( hSource, @cData, LEN( cData ) )
IF nRead = 0
IF FERROR() = 0
? "Upload OK"
ELSE
? "Read error"
ENDIF
EXIT
ENDIF
IF !INTERNETWRITEFILE( hDest, @cData, nRead )
? "Upload error"
EXIT
ENDIF
nPos += LEN( cData )
oPrg:SetPos( nPos )
ENDDO
FCLOSE( hSource )
INTERNETCLOSEHANDLE( hDest )
INTERNETCLOSEHANDLE( hConnect )
INTERNETCLOSEHANDLE( hInternet )
RETURN NIL
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "hbapi.h"
HB_FUNC( INTERNETOPEN )
{
hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( INTERNETCLOSEHANDLE )
{
hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}
HB_FUNC( INTERNETCONNECT )
{
hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}
HB_FUNC( FTPOPENFILE )
{
hb_retnl( ( LONG ) FtpOpenFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( FTPGETFILESIZE )
{
DWORD nFileSizeHigh;
hb_retnl( ( LONG ) FtpGetFileSize( ( HINTERNET ) hb_parnl( 1 ), &nFileSizeHigh ) );
}
HB_FUNC( INTERNETREADFILE )
{
DWORD nBytesRead;
BOOL lSuccess = InternetReadFile( ( HINTERNET ) hb_parnl( 1 ), ( LPVOID ) hb_parc( 2 ), hb_parclen( 2 ), &nBytesRead );
if ( !lSuccess )
hb_retnl( -1 );
else
hb_retnl( nBytesRead );
}
HB_FUNC( INTERNETWRITEFILE )
{
DWORD nBytesWritten;
BOOL lSuccess = InternetWriteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), &nBytesWritten );
hb_retl( lSuccess );
}
#pragma ENDDUMP
#include "Fivewin.ch"
//
// File attributes
//
#define FILE_ATTRIBUTE_READONLY 1
#define FILE_ATTRIBUTE_HIDDEN 2
#define FILE_ATTRIBUTE_SYSTEM 4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE 32
#define FILE_ATTRIBUTE_NORMAL 128
#define FILE_ATTRIBUTE_TEMPORARY 256
//
// access types for InternetOpen()
//
#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
//
// manifests
//
#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default
#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "
#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "
#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "
#define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.
//
// service types for InternetConnect()
//
#define INTERNET_SERVICE_FTP 1
#define INTERNET_SERVICE_GOPHER 2
#define INTERNET_SERVICE_HTTP 3
//
// flags for FTP
//
#define INTERNET_FLAG_TRANSFER_ASCII 1
#define INTERNET_FLAG_TRANSFER_BINARY 2
//
// file access types
//
#define GENERIC_READ 2147483648
#define GENERIC_WRITE 1073741824
FUNCTION MAIN()
LOCAL oDlg, oPrg
DEFINE DIALOG oDlg
@ 2, 2 PROGRESS oPrg;
SIZE 100, 15
@ 3, 2 BUTTON "FTP download";
ACTION DOWNLOAD( oPrg )
ACTIVATE DIALOG oDlg;
CENTER
RETURN NIL
STATIC FUNCTION DOWNLOAD( oPrg )
LOCAL hInternet, hConnect, hSource, hDest, nRead
LOCAL cData := SPACE( 1024 )
LOCAL nPos := 0
hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
hConnect = INTERNETCONNECT( hInternet, "myftpaddress", INTERNET_INVALID_PORT_NUMBER, "myuserid", "mypassword", INTERNET_SERVICE_FTP, 0, 0 )
hSource = FTPOPENFILE( hConnect, "/emagsoftware.it/FTPWRITEFILE.PRG", GENERIC_READ, 0, 0 )
oPrg:SetPos( 0 )
oPrg:SetRange( 0, FTPGETFILESIZE( hSource ) )
hDest = FCREATE( "FTPWRITEFILENEW.PRG" )
WHILE .T.
nRead = INTERNETREADFILE( hSource, @cData )
IF nRead = -1
? "Download error"
EXIT
ENDIF
IF nRead = 0
? "Download OK"
EXIT
ENDIF
FWRITE( hDest, cData, nRead )
nPos += LEN( cData )
oPrg:SetPos( nPos )
ENDDO
FCLOSE( hDest )
INTERNETCLOSEHANDLE( hSource )
INTERNETCLOSEHANDLE( hConnect )
INTERNETCLOSEHANDLE( hInternet )
RETURN NIL
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "hbapi.h"
HB_FUNC( INTERNETOPEN )
{
hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( INTERNETCLOSEHANDLE )
{
hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}
HB_FUNC( INTERNETCONNECT )
{
hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}
HB_FUNC( FTPOPENFILE )
{
hb_retnl( ( LONG ) FtpOpenFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( FTPGETFILESIZE )
{
DWORD nFileSizeHigh;
hb_retnl( ( LONG ) FtpGetFileSize( ( HINTERNET ) hb_parnl( 1 ), &nFileSizeHigh ) );
}
HB_FUNC( INTERNETREADFILE )
{
DWORD nBytesRead;
BOOL lSuccess = InternetReadFile( ( HINTERNET ) hb_parnl( 1 ), ( LPVOID ) hb_parc( 2 ), hb_parclen( 2 ), &nBytesRead );
if ( !lSuccess )
hb_retnl( -1 );
else
hb_retnl( nBytesRead );
}
HB_FUNC( INTERNETWRITEFILE )
{
DWORD nBytesWritten;
BOOL lSuccess = InternetWriteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), &nBytesWritten );
hb_retl( lSuccess );
}
#pragma ENDDUMP
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: Google [Bot] and 71 guests