ANT FTP上传文件:425无法建立数据连接:连接超时

lon*_*ony 2 ant ftp

我尝试通过ANT FTP自动部署小型站点.我使用Win7-64bit,开始作为一项简单的任务变得越来越挑战.我首先想到我必须安装我做的其他课程.commons-net-3.0.1.jar, jakarta-oro-2.0.8.jar然后我不得不停用防火墙的部分,我也做了.netsh advfirewall set global StatefulFTP disable但即使是现在也没有用.

但是一步一步,这就是任务:

<target name="ftp" description="">
<ftp server="${ftp.server}"
     userid="${ftp.user}"
     password="${ftp.password}"
     verbose="yes">
    <fileset dir="..">
        <include name="maintenance.php"/>
    </fileset>
</ftp>
</target>
Run Code Online (Sandbox Code Playgroud)

多数民众赞成的结果:

ftp:
  [ftp] sending files
  [ftp] transferring C:\xampp\htdocs\maintenance.php

BUILD FAILED
C:\xampp\htdocs\xdf\build.xml:32: could not put file: 425 Unable to build data con
nection: Connection timed out


Total time: 3 minutes 10 seconds
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

UPDATE找到了Zend自动同步接缝的工作示例ANT 1.8.3具有以下新功能:

<property name="ftp.server" value="ftp.foo.bar"/>
<property name="ftp.user" value="foor"/>
<property name="ftp.password" value="bar"/>
<property name="ftp.basedir" value=""/>
<property name="ftp.verbose" value="yes"/>

<target name="ftp-upload" description="Synchronise to FTP">
        <!-- Create temp folder -->
    <tempfile prefix="ant-epp-" destdir="${java.io.tmpdir}" property="temp.file"/>
    <mkdir dir="${temp.file}"/>

        <!-- Move, rename, upload, delete 'maintenance.php' -->
    <copy file="docs/hosting/maintenance.php" tofile="${temp.file}/index.php" />
    <ftp server="${ftp.server}"
            userid="${ftp.user}"
            password="${ftp.password}"
            remotedir="${ftp.basedir}/public"
            passive="yes"
            binary="yes"
            verbose="${ftp.verbose}">
        <fileset dir="${temp.file}">
            <include name="index.php" />
        </fileset>
    </ftp>
    <delete dir="${temp.file}" />

        <!-- Remove 'application' & Reupload -->
    <ftp action="del" server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}"
            remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}">
        <fileset>
            <include name="**" />
        </fileset>
    </ftp>
    <ftp action="rmdir" server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}"
            remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}">
        <fileset>
            <include name="**" />
        </fileset>
    </ftp>
    <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}"
            remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}">
        <fileset dir="application" />
    </ftp>

        <!-- Replace 'index.php' -->
    <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}"
            remotedir="${ftp.basedir}/public" passive="yes" binary="yes" verbose="${ftp.verbose}">
        <fileset dir="public">
            <include name="index.php" />
        </fileset>
    </ftp>
</target>
Run Code Online (Sandbox Code Playgroud)

sud*_*ode 6

我怀疑你还有防火墙问题.

在FTP通过防火墙的情况下,使用被动模式通常很有帮助.

许多FTP客户端(Filezilla以多个为例)默认为被动模式.

蚂蚁FTP任务默认为激活模式:

被动 选择被动模式("是")传输,以更好的防火墙连接,以性能为代价.默认为"否"

尝试passive="yes"在Ant FTP任务中使用.

这里有一个很好的解释:

425无法建立数据连接:连接超时

尝试传输文件或在活动(PORT)模式下列出目录时,可能会发生此错误.通常通过切换到被动模式来解决问题...

问题解释:在活动模式下,数据连接的设置如下:客户端发送PORT命令,告诉服务器它将监听数据连接的端口.服务器接收PORT命令并启动与客户端IP /端口的连接.但是,如果防火墙阻止了传入连接,那么它将无法应答,服务器将超时等待接受连接.

我不是防火墙所期望的,但我认为你执行配置防火墙(netsh advfirewall set global StatefulFTP disable)的命令是你想要在防火墙后面的Windows机器上运行FTP 服务器时所要做的.在您的情况下,我认为您从Windows作为客户端连接到远程FTP服务器,所以我认为您可以撤消该命令.