SFTP将文件上传到同一远程服务器上的多个目录

时间:2019-01-21 19:30:48

标签: java spring-integration sftp spring-integration-sftp

我已使用示例here实现了SFTP上传到远程服务器。

我的要求是我必须将同一文件上传到同一服务器上的多个目录。目录的确切编号或位置将在后期制作中得知。

当前,通过在消息处理程序上设置remoteDirectoryExpression,我的实现允许将文件上传到单个服务器上的单个目录。 remoteDirectoryExpression来自属性文件。预期其余目录将在同一属性上以逗号分隔的方式配置。我希望实现从属性中提取这些逗号分隔的目录,然后将文件上传到每个目录。

这甚至可能吗?我遇到过发布-订阅渠道,但目前正在努力了解如何将其包含在我的实现中。即使这样,发布-订阅频道似乎也需要在其中一个频道=一个目录的代码中进行预配置。所以我什至在正确的轨道上吗?

2 个答案:

答案 0 :(得分:2)

没有内置功能可以做到这一点。

最简单的方法是在上游创建一个自定义拆分器,并在标头中包含目录的情况下发出n条消息,然后在远程目录表达式中使用标头值。

答案 1 :(得分:1)

尝试使用publishSubscribeChannel

.publishSubscribeChannel(s -> s
                        .subscribe(f -> f
                                .handle(Sftp.outboundAdapter(sftpSessionFactory())
                                        .remoteDirectory(getRemoteRootDir() + remoteDirectory1)

                                        .temporaryFileSuffix(".tmp")))
                        .subscribe(f -> f
                                .handle(Sftp.outboundAdapter(sftpSessionFactory())
                                        .remoteDirectory(getRemoteRootDir() + remoteDirectory2)
                                        .fileNameExpression(fileRenameExpression)
                                        .temporaryFileSuffix(".tmp")))