如何使用 Java 配置将文件从一个文件夹移动到远程 sftp 服务器上的另一个文件夹,动态提供文件名?
How to move file from one folder to another folder on remote sftp server providing the filename dynamically using Java Config?
我被这个问题困住了。我的 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']";
(相对路径头由入站适配器设置)
我被这个问题困住了。我的 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']";
(相对路径头由入站适配器设置)