我已使用示例here实现了SFTP上传到远程服务器。
我的要求是我必须将同一文件上传到同一服务器上的多个目录。目录的确切编号或位置将在后期制作中得知。
当前,通过在消息处理程序上设置remoteDirectoryExpression
,我的实现允许将文件上传到单个服务器上的单个目录。 remoteDirectoryExpression
来自属性文件。预期其余目录将在同一属性上以逗号分隔的方式配置。我希望实现从属性中提取这些逗号分隔的目录,然后将文件上传到每个目录。
这甚至可能吗?我遇到过发布-订阅渠道,但目前正在努力了解如何将其包含在我的实现中。即使这样,发布-订阅频道似乎也需要在其中一个频道=一个目录的代码中进行预配置。所以我什至在正确的轨道上吗?
答案 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")))