当从运行windows服务器2008R2的vfp EXE上传文件到ftp站点时,它只创建了0 KB的文件



作为一名VFP数据库开发人员,需要创建一些CAB/ZIP文件(每天)并上传到我们的ftp网站上。我们正在使用windows服务器2008 R2来执行此auto.exe。

以前它工作得很好,但由于某种原因,我们重新安装了服务器2008,所有服务器的更新,现在我的auto.exe创建CAB文件,也在ftp服务器上上传文件,但服务器上的大小是0kb

我们使用以下代码将CAB文件上传到ftp服务器

FUNCTION FTPPut
    PARAMETERS lcHost, lcUser, lcPassword, lcSource, lcTarget, lnXFerType
    *.................................................................................
    *.................................................................................
    DECLARE INTEGER InternetOpen IN wininet.DLL;
        STRING  sAgent,;
        INTEGER lAccessType,;
        STRING  sProxyName,;
        STRING  sProxyBypass,;
        STRING  lFlags
    DECLARE INTEGER InternetCloseHandle IN wininet.DLL INTEGER hInet
    DECLARE INTEGER InternetConnect IN wininet.DLL;
        INTEGER hInternetSession,;
        STRING  lcHost,;
        INTEGER nServerPort,;
        STRING  lcUser,;
        STRING  lcPassword,;
        INTEGER lService,;
        INTEGER lFlags,;
        INTEGER lContext
    DECLARE INTEGER FtpPutFile IN wininet.DLL;
        INTEGER hConnect,;
        STRING  lpszLocalFile,;
        STRING  lpszNewRemoteFile,;
        INTEGER dwFlags,;
        INTEGER dwContext
    PUBLIC hOpen, hftpSession
    lcHost     = ALLTRIM(lcHost)
    lcUser     = ALLTRIM(lcUser)
    lcPassword = ALLTRIM(lcPassword)
    lcSource   = ALLTRIM(lcSource)
    lcTarget   = ALLTRIM(lcTarget)
    IF connect2ftp (lcHost, lcUser, lcPassword)
        WAIT WINDOW 'Transferring....' NOWAIT
        IF FtpPutFile(hftpSession, lcSource,;
                lcTarget, lnXFerType, 0) = 1
            WAIT WINDOW lcSource + ' transferred.' TIMEOUT 2
        ENDIF
        = InternetCloseHandle (hftpSession)
        = InternetCloseHandle (hOpen)
    ENDIF

提前感谢

如果不知道程序"connect2ftp"的作用,我无法回答您的问题,尽管我认为它会连接并打开FTP连接。

您可能需要确保包含lnXferType=2,以便获得二进制传输。

由于我没有您使用的连接的代码,我将提供我们一直使用的解决方案,Robert Abraham的FTP Class 2.07可从下载http://leafe.com/download/ftpc_2.0.7_20090418.zip

它非常小,易于使用VFP解决方案,上传文件如下:

LOCAL loFTP
SET PROCEDURE TO ftp.prg ADDITIVE 
loFTP=CREATEOBJECT('ftp_service') 
IF loFTP.OpenInternet("ABONNE", "PWD", "10.10.10.10", "21")
   IF loFTP.PutFTPFile("any.txt","local.txt", FTP_TRANSFER_TYPE_BINARY)
      ?STRTRAN("File %File% uploaded","%File%","local.txt")
   ELSE
      ?loFTP.GetExtendedErrorCode(),loFTP.GetExtendedErrorMsg()
   ENDIF
   =loFTP.CloseInternet() 
ENDIF
RELEASE PROCEDURE ftp.prg

很可能您正在使用活动连接(InterConnect lFlags参数0-在这种情况下,防火墙也可能处于阻塞状态)。尝试使用设置为INTERNET _FLAG_PASSIVE:的lFlags

定义INTERNET _FLAG_PASSIVE 0x8000000

最新更新