Spring集成ftp在自定义过滤器中获取整个文件

时间:2015-02-04 12:49:07

标签: spring-integration

我有一个使用ftp入站通道适配器获取文件的应用程序。我一直无法使用acceptoncefilefilter。因此,我可以根据自己的存储数据检查文件。数据是文件的sha密钥。

我的问题是我使用的customfilefilter只获取FTPFile,而不是实际文件。因此,我无法为其生成SHA密钥。

这是相关配置

    <int-ftp:inbound-channel-adapter id="ftpInbound"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    local-directory="c:\DMSRoot"
    temporary-file-suffix=".writing"
    remote-directory="DMS"
     preserve-timestamp="true"
     auto-startup="true"
     filter="compositeFilterRemote">
    <int:poller fixed-delay="5000" error-channel="errorChannel"/>
</int-ftp:inbound-channel-adapter>
<int-ftp:outbound-channel-adapter id="ftpOutbound"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    remote-file-separator="/"
    auto-create-directory="true"
    remote-directory="DMS" 
    use-temporary-file-name="true"
     temporary-file-suffix=".writing">
    <int-ftp:request-handler-advice-chain>
         <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="onSuccessExpression" value="new File(payload).delete()" />
            <property name="onFailureExpression" value="new File(payload).delete()" />
          </bean>
    </int-ftp:request-handler-advice-chain>
  </int-ftp:outbound-channel-adapter>
    <bean id="compositeFilterRemote" class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <!-- Ensures that the file is whole before processing it -->
                <bean class="org.springframework.integration.file.filters.AcceptAllFileListFilter" />
                <bean class="com.polling.util.CustomFileFilterRemote"/>
                <!-- Ensures files are picked up only once from the directory -->

            </list>
        </constructor-arg>
    </bean>

    public class CustomFileFilterRemote implements FileListFilter<FTPFile>
{

    @Override
    public List<FTPFile> filterFiles(FTPFile[] files)
    {

请告诉我如何才能做到这一点?

1 个答案:

答案 0 :(得分:1)

你必须首先获取文件来计算sha - 有两个过滤器 - 一个用来决定我们是否应该获取文件(我们只是接收文件元数据 - 比如来自ls)。获取文件后,将对文件系统文件使用第二个过滤器(local-filter)。