从本地轮询特定文件名到FTP服务器

时间:2018-12-05 10:28:06

标签: spring spring-integration

我要将特定的文件从本地文件夹发送到FTP,此文件夹包含不同的csv文件,我只想发送特定的文件。这是我正在使用的代码,但这将发送此文件夹中的所有CSV文件,如何查看是否存在此特定文件,例如“ foo.csv”,如果存在,则将其发送到FTP

public IntegrationFlow localToFtpFlow(Branch myBranch){
        return IntegrationFlows.from(Files.inboundAdapter(new File(myBranch.getBranchCode()))//.patternFilter("final" + myBranch.getBranchCode() +".csv")
                    .filter(new ChainFileListFilter<File>()
                            .addFilter(new RegexPatternFileListFilter("final" + myBranch.getBranchCode() +".csv"))
                            .addFilter(new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "foo"))),
                        //.filter(new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "foo")),
                e -> e.poller(Pollers.fixedDelay(10_000)))

                .log()
                .handle(Ftp.outboundAdapter(createNewFtpSessionFactory(myBranch), FileExistsMode.REPLACE)
                        .useTemporaryFileName(true)
                        .autoCreateDirectory(true)
                        .remoteDirectory(myBranch.getFolderPath()))
                .get();
    }

我尝试如下所示添加patterfilter或regexfilter,但出现错误。

IntegrationFlows.from(Files.inboundAdapter(new File(myBranch.getBranchCode())).patternFilter("final" + myBranch.getBranchCode() +".csv")

运行时出错。

The 'filter' reference is mutually exclusive with either the 'filename-pattern' or 'filename-regex' attribute.

试图寻找解决方案,但找不到清晰的解决方案。

1 个答案:

答案 0 :(得分:0)

当您需要在Files.inboundAdapter()上配置多个过滤器时,需要考虑使用CompositeFileListFilterChainFileListFilter。将ChainFileListFilterSimplePatternFileListFilter组合成一个,并将复合过滤器注入该.filter()选项。

.patternFilter().regexFilter()在这里是为了方便起见,它们实际上与.filter()是互斥的。

在文档中查看有关撰写的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/files.html#file-reading