gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:50:27 25 4
gpt4 key购买 nike

我被这个问题困扰了。我的 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']";

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

关于java - 如何使用 Java Config 将文件从一个文件夹移动到远程 sftp 服务器上的另一个文件夹并动态提供文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56353840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com