如何使用 Java Config 动态提供文件名,将文件从一个文件夹移动到远程 sftp 服务器上的另一个文件夹?

阿列克谢·斯特布尔

我被这个问题困住了。我的 sftp 服务器有一个文件,里面有一个文件:folder/file.txt我想要做的只是将此文件移动到另一个目录:folder/subfolder/file.txt在文档中写道,您只需将 OutboundGateway 与 MV 命令一起使用。没关系,但主要问题是我不知道文件的确切名称是什么,所以我需要动态提供这个名称。我怎样才能做到这一点?

@Bean
@InboundChannelAdapter(value = "toSftpChannel",
        poller = @Poller(fixedDelay = "60000", maxMessagesPerPoll = "-1"))
public MessageSource<File> sftpMessageSource() {
    SftpInboundFileSynchronizingMessageSource source =
            new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
    source.setLocalDirectory(new File(localDirectory));
    source.setAutoCreateLocalDirectory(true);
    source.setLocalFilter(new AcceptOnceFileListFilter<File>());
    return source;
}

@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
    SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(getSftpSessionFactory());
    fileSynchronizer.setDeleteRemoteFiles(false);
    fileSynchronizer.setRemoteDirectory("/folder");
    fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.txt"));
    return fileSynchronizer;
}

@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public SftpOutboundGateway moveFileHandler() {
     SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(getSftpSessionFactory(), "mv", "'folder/" + "file.txt" + "'");                                                  
        sftpOutboundGateway.setRenameExpression(new LiteralExpression("/folder/subfolder/" + "file.txt"));
        return sftpOutboundGateway;
    }
加里·拉塞尔

不要使用文字表达式,而是使用动态表达式。

例如代替

"'folder/" + "file.txt" + "'"

"'folder/' + headers['file_relativePath']"

sftpOutboundGateway.setRenameExpression(parser.parseExpression("'/folder/subfolder/' + headers['file_relativePath']";

(相对路径标头由入站适配器设置)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档