【问题标题】:SFTP upload file to multiple directories on the same remote serverSFTP 将文件上传到同一远程服务器上的多个目录
【发布时间】:2019-01-21 19:30:47
【问题描述】:

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

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

目前,我的实现允许上传到单个服务器上的单个目录,方法是在消息处理程序上设置remoteDirectoryExpressionremoteDirectoryExpression 来自属性文件。预计其余目录将以逗号分隔的方式配置在同一属性上。我希望我的实现从属性中提取每个逗号分隔的目录并将文件上传到每个目录。

这甚至可能吗?我遇到了发布-订阅频道,但目前正在努力了解如何将它们包含在我的实现中。即便如此,发布-订阅频道似乎需要在代码中进行预配置,其中一个频道 = 一个目录。那么我是否走在正确的轨道上?

【问题讨论】:

  • 这似乎是一种非常低效的做事方式。不能只上传一次,然后本地复制到每个目录吗?
  • @Gedarme 是的!这就说得通了。让我试试看。
  • 如果文件很大,这也将为您节省大量带宽。
  • @Gendarme 显然不支持 :) stackoverflow.com/questions/37664612/…

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


【解决方案1】:

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

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

【讨论】:

  • 简单,我很生气我自己没有想到这一点。谢谢!
【解决方案2】:

尝试发布订阅频道

.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")))

【讨论】:

  • 这也可以,但前提是您在编写代码时知道目的地的数量;拆分器解决方案将使用可变数量的目录(通过属性或在运行时用于特定文件或文件类型)。但我给了你一票。
  • 谢谢加里,请帮忙查询一下 [stackoverflow.com/questions/54329898/…
猜你喜欢
  • 2018-12-10
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多