作为VFP数据库开发人员,需要在我们的ftp站点上创建并上传一些CAB / ZIP文件(每日)。我们正在使用Windows Server 2008 R2来实现这个自动exe。
以前它工作正常,但由于某种原因我们重新安装了服务器2008,所有服务器的更新,现在我的auto-exe创建CAB文件并在ftp服务器上传文件,但它在服务器上的大小为0 kb < / p>
我们使用以下代码将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
提前致谢
答案 0 :(得分:2)
我无法在不知道程序“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
答案 1 :(得分:0)
您很可能正在使用活动连接(InterConnect lFlags参数0 - 在这种情况下防火墙也可能阻塞)。尝试使用设置为INTERNET_FLAG_PASSIVE的lFlags: