Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
SFTP ActiveX control
Message
De
11/01/2012 19:41:33
Jim Wiggins
Affordable Custom Software
Illinois, États-Unis
 
 
À
11/01/2012 17:06:50
Information générale
Forum:
Visual FoxPro
Catégorie:
Contrôles ActiveX en VFP
Versions des environnements
Visual FoxPro:
VFP 7
OS:
Windows XP
Divers
Thread ID:
01532751
Message ID:
01532753
Vues:
84
If you decide to use wininet instead of an activeX control, below is an example of how I publish files to an FTP site. It's based mainly on the work of Rick Strahl.

Jim Wiggins
* For publishing all the files in cFromFolder using FTP
LOCAL cPwd, cFileName, cUid, cServer, cFtpFolder, cFromFolder
LOCAL lFailed, i, cError
LOCAL lsFileFind
lFailed = .f.
cError = ""
* NOTE: modify next five lines as appropriate
cUid       = "<<the FTP user id>>"
cServer    = "<<the FTP url>>"
cPwd       = "<<the password>>"
cFtpFolder = "<<the folder to publish to>>"
cFromFolder= "<<the folder that contains the files to be published>>"

#DEFINE INTERNET_INVALID_PORT_NUMBER 0
#DEFINE INTERNET_SERVICE_FTP         1
#DEFINE INTERNET_FLAG_PASSIVE 0x08000000
#DEFINE INTERNET_FLAG_ACTIVE         0
#DEFINE INTERNET_OPEN_TYPE_DIRECT    1
#DEFINE FTP_TRANSFER_TYPE_ASCII      1
#DEFINE FTP_TRANSFER_TYPE_BINARY     2

DECLARE INTEGER InternetConnect IN wininet;
    INTEGER hInternetSession,;
    STRING  sServerName,;
    INTEGER nServerPort,;
    STRING  sUsername,;
    STRING  sPassword,;
    INTEGER lService,;
    INTEGER lFlags,;
    INTEGER lContext
 
DECLARE INTEGER InternetOpen IN wininet;
	STRING sAgent, INTEGER lAccessType,;
	STRING sProxyName, STRING sProxyBypass,;
	INTEGER lFlags

DECLARE INTEGER FtpSetCurrentDirectory IN wininet;
    INTEGER hConnect,;
    STRING @lpszDirectory
 
DECLARE INTEGER FtpCreateDirectory IN wininet;
    INTEGER hConnect,;
    STRING lpszDirectory

DECLARE INTEGER FtpDeleteFile ;
   IN WinInet.dll ;
   INTEGER hFTPSession,;
   STRING cFileName
   
DECLARE INTEGER FtpFindFirstFile ;
   IN WININET.DLL ;
   INTEGER hFTPSession,;
   STRING cFileSpec,;
   STRING @sFileFind,;
   INTEGER nFlags,;
   INTEGER nContext

DECLARE INTEGER InternetFindNextFile ;
   IN WinInet.DLL ;
   INTEGER hFindHandle,;
   STRING @lsFileFind

DECLARE INTEGER FtpPutFile IN wininet;
    INTEGER hConnect,;
    STRING  lpszLocalFile,;
    STRING  lpszNewRemoteFile,;
    INTEGER dwFlags,;
    INTEGER dwContext

DECLARE INTEGER InternetOpenUrl IN wininet;
    INTEGER hInternet,;
    STRING  lpszUrl,;
    STRING  lpszHeaders,;
    INTEGER dwHeadersLength,;
    INTEGER dwFlags,;
    INTEGER dwContext
    
DECLARE INTEGER InternetCloseHandle IN wininet INTEGER hInet

WAIT " Publishing... " WINDOW AT SROWS()/2-1, (SCOLS()/2)-50 NOWAIT 

hInternet  = InternetOpen("FoxFtp", INTERNET_OPEN_TYPE_DIRECT, CHR(0), CHR(0), 0)
IF ISNULL(hInternet)  && this may never happen. Seems to always work, even with no physical connection
  lFailed = .t.
  cError = "access the internet"
ELSE   
  hConnection = InternetConnect(m.hInternet, cServer, ;
    	  INTERNET_INVALID_PORT_NUMBER, ;
	      cUid, cPwd, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
  IF hConnection = 0
    lFailed = .t.
    cError = "connect"
  ELSE
    FtpSetCurrentDirectory(m.hConnection, @cFtpFolder)
    ADIR(aFiles,cFromFolder+"\*.*","",1)
    FOR m.i = 1 TO ALEN(aFiles,1)
      WAIT " Publishing "+STR(m.i,3,0)+" of "+STR(ALEN(aFiles,1),3,0) WINDOW AT SROWS()/2-1, (SCOLS()/2)-50 NOWAIT 
      IF FtpPutFile(m.hConnection, cFromFolder+"\" + aFiles(m.i,1), ;
                    aFiles(m.i,1), ;
                    FTP_TRANSFER_TYPE_BINARY, 0) = 0
        lFailed = .t.
        cError = "Publish "+ aFiles(m.i,1)
        EXIT 
      ENDIF   
    ENDFOR 
  ENDIF       
ENDIF

IF VARTYPE(hInternet)="N"
  InternetCloseHandle(m.hInternet)
ENDIF
  
#UNDEFINE INTERNET_INVALID_PORT_NUMBER 0
#UNDEFINE INTERNET_SERVICE_FTP         1
#UNDEFINE INTERNET_FLAG_PASSIVE 0x08000000
#UNDEFINE INTERNET_FLAG_ACTIVE         0
#UNDEFINE INTERNET_OPEN_TYPE_DIRECT    1
#UNDEFINE FTP_TRANSFER_TYPE_ASCII      1
#UNDEFINE FTP_TRANSFER_TYPE_BINARY     2

WAIT CLEAR 

IF lFailed
  MESSAGEBOX("The server did not respond. Please try again in a few minutes.",16,"Unable to " + cError + ".")
  RETURN .f.
ELSE
  RETURN .t.  
ENDIF 
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform