java - 如何将文件从一个文件夹移动到远程 sftp 服务器上的另一个文件夹,使用 Java Config 动态提供文件名?
问题描述
我被这个问题困住了。我的 sftp 服务器上有一个文件夹,里面有一个文件:folder/file.txt。我要做的只是将此文件移动到另一个目录:文件夹/子文件夹/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']";
(相对路径头由入站适配器设置)。
推荐阅读
- c++ - (C++) Direct3D 11 Draw() 函数不起作用,尽管检查了所有 HRESULT
- python - 使用循环函数在python中基于两个不同的数据框创建新的数据框
- firebase - 颤振异常:处理手势时抛出以下 NoSuchMethodError:getter 'email' 被调用为 null
- c# - 如何在 C# 中解决这个破坏问题
- c# - 在 Azure Web App 启动期间使用 AddAzureKeyVault 时出现 SocketException (10060)
- c - 使用 if-else 计算 C 中数字的起始数字和长度
- apache-kafka - Kafka Connect:上次重新平衡后无法恢复工作
- file-permissions - wsl2 更改文件权限失败
- go - 如何在 Golang 中为 Postgres 指定模式?
- postman - Can I search my Postman collection for a URL?