作为一名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