在从ftp站点上传文件到运行windows server 2008R2的vfp EXE时,它只创建0 KB文件
问题描述:
作为VFP数据库开发人员,需要创建一些CAB/ZIP文件(每日)并上传到我们的ftp站点。我们正在使用Windows Server 2008 R2的这个自动exe文件。在从ftp站点上传文件到运行windows server 2008R2的vfp EXE时,它只创建0 KB文件
以前它工作正常,但由于某种原因,我们重新安装了服务器2008,所有服务器的更新,现在我的自动EXE创建CAB文件,也上传FTP服务器上的文件,但它的大小在服务器上是0 kb
我们用下面的代码上传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”确实,虽然我假定它连接并运行ns FTP连接。
您可能希望确保包含lnXferType = 2,以便进行二进制传输。
由于我没有代码,您使用的连接,我将提供我们一直使用这个解决方案,罗伯特·亚伯拉罕的FTP类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
答
这是最有可能使用的是活动连接(互连LFLAGS参数0 - 也可能是防火墙在这种情况下阻止)。尝试使用设置为INTERNET_FLAG_PASSIVE LFLAGS:
非常感谢您的帮助,但是这仍然无法在Windows Server 2008 R2上的工作,在我的笔记本电脑(Windows 10),它工作正常。所以Windows更新有问题。在某些更新之前它正在正常工作,现在根本不工作 –