Я пытался использовать SftpInboundFileSynchronizer
с удаленным каталогом, который содержит подкаталог, скажем /myfiles/mysubdir/lefile.txt, я установил фильтр для захвата файлов внутри каталогов:
mysync.setRemoteDirectory("myfiles/");
mysync.setFilter(new SftpRegexPatternFileListFilter(".*\\.txt$"));
А затем SftpInboundFileSynchronizingMessageSource
в качестве моего InboundChannelAdapter, который я установил на SftpInboundFileSynchronizingMessageSource
a RecursiveDirectoryScanner
в качестве сканера, и у меня нет установленного ограничения на глубину или количество файлов для извлечения.Я также установил FOLLOW_LINKS
fileVisitOption на сканере для хорошей меры.
Я могу только извлекать файлы в локальный каталог по пути myfiles, но все, что глубже, не копируется в локальный каталог.Я не могу понять, если есть что-то, чем я не занимаюсь.
РЕДАКТИРОВАТЬ: Что будет содержать InboundChannelAdapter, если я только собираюсь отправить "/"как каталог для проверки с помощью mget -R?
@Bean
@InboundChannelAdapter(value = "sftpChannel", poller = @Poller(fixedDelay = "10"))
public MessageSource<?> myMessageSource() {
}
@Bean(name = "myGateway")
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
SftpOutboundGateway gateway =
new SftpOutboundGateway(sftpSessionFactory(), "mget", "'myfiles/*'");
gateway.setOutputChannelName("listSplitter");
gateway.setOptions("-R");
gateway.setAutoCreateLocalDirectory(true);
myLocalPath = Paths.get(myLocalParentDir).toRealPath().toString();
gateway.setLocalDirectory(new File(myLocalPath));
SftpRegexPatternFileListFilter regexFilter = new regexFilter("^.*\\.txt");
regexFilter.setAlwaysAcceptDirectories(true);
regexFilter.setFilter(sftpRegexPatternFileListFilter);
return gateway;
}