Spring Integration使用outbound-gateway递归获取FTP文件

时间:2014-06-02 12:49:17

标签: java spring ftp spring-integration

我正在尝试将所有文​​件放在3级深度的目录结构中 例如:
- 图像a.jpg存在于文件夹/ images / 12/34 /
中 - 图像b.jpg存在于文件夹/ images / 56/78

我尝试过如下所述的出站网关:

  

https://github.com/spring-projects/spring-integration-samples/blob/master/basic/ftp/src/test/resources/META-INF/spring/integration/FtpOutboundGatewaySample-context.xml
http://forum.spring.io/forum/spring-projects/integration/104612-inbound-ftp-polling-sub-directories?p=604430#post604430

我的配置:

<bean id="ftpSessionFactory"
    class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
    <property name="host" value="127.0.0.1"/>
    <property name="port" value="21"/>
    <property name="username" value="Administrator"/>
    <property name="password" value="SgtSpeedy1"/>
    <property name="fileType" value="2"/>
    <property name="clientMode" value="2" />
</bean>

<int-ftp:outbound-gateway id="gatewayLS"
    cache-sessions="false"
    session-factory="ftpSessionFactory"
    request-channel="inbound"
    command="ls"
    command-options=""
    expression="'/images/*/*'"
    reply-channel="toSplitter"/>

<int:channel id="toSplitter" />
<int-stream:stdout-channel-adapter channel="toSplitter" append-newline="true"/>

我省略了拆分器,只是打印出来用于测试目的。

测试时,我没有得到任何文件。 我已经尝试将文件夹设置为/ images / *然后它将返回“images”文件夹下的所有图像,但不会像提供的链接中所述那样递归。因此不考虑文件夹/ 12/34和/ 56/78。

我看不出我错过了什么。有人可以帮忙吗?

P.S。我正在使用Spring Integration 2.2.6而无法升级到4.0.2(最新版),因为我正在使用框架。否则我会为网关使用-R选项!

1 个答案:

答案 0 :(得分:0)

我刚刚使用foo/foo/bar/qux.txtfoo/foo/baz/fiz.txt

进行了测试
<int-ftp:outbound-gateway id="gatewayLS"
    session-factory="ftpSessionFactory"
    request-channel="inbound"
    command="ls"
    command-options="-1"
    expression="'foo/*/*'"
    reply-channel="toSplitter"/>

它工作正常;正如所料......

11:34:55.983 DEBUG [main] ...[Payload ArrayList content=[fiz.txt, qux.txt]]...

(我添加了-1选项来获取文件名)。

这是在服务器端使用linux ftpd。

您确定这些文件位于/images而不是images吗? (或者是用户chrooted所以/是他的家?)