2017-02-19 2 views

ответ

0

Нет; но вы можете получить полное удаленное дерево каталогов с рекурсивной MGET с шлюзом исходящим ...

@SpringBootApplication 
@IntegrationComponentScan 
public class So42324318Application { 

    public static void main(String[] args) { 
     ConfigurableApplicationContext context = SpringApplication.run(So42324318Application.class, args); 
     List<File> files = context.getBean(Gateway.class).fetchFiles("foo/*"); 
     System.out.println(files); 
     context.close(); 
    } 

    @MessagingGateway(defaultRequestChannel = "fetchRecursive") 
    public interface Gateway { 

     public List<File> fetchFiles(String remoteDir); 

    } 

    @Bean 
    @ServiceActivator(inputChannel = "fetchRecursive") 
    public FtpOutboundGateway gateway() { 
     // Create a recursive MGET gateway that gets the remote directory from the payload 
     FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "mget", "payload"); 
     gateway.setOptions("-R"); 
     gateway.setLocalDirectoryExpression(new SpelExpressionParser().parseExpression("#remoteDirectory")); 
     return gateway; 
    } 

    @Bean 
    public SessionFactory<FTPFile> sessionFactory() { 
     return new CachingSessionFactory<>(ftpSF()); 
    } 

    private SessionFactory<FTPFile> ftpSF() { 
     DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory(); 
     sf.setHost("10.0.0.3"); 
     sf.setUsername("ftptest"); 
     sf.setPassword("ftptest"); 
     sf.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE); 
     return sf; 
    } 

} 

Результат:

2017-02-19 09:55:09.351 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/bar.tx 
2017-02-19 09:55:09.353 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/bar.txt 
2017-02-19 09:55:09.356 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/bar/abc.txt 
2017-02-19 09:55:09.358 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/baz.txt 
2017-02-19 09:55:09.362 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/foo/bar/qux.txt 
2017-02-19 09:55:09.364 INFO 61921 --- [   main] o.s.integration.ftp.session.FtpSession : File has been successfully transferred from: foo/foo/baz/fiz.txt 
[foo/bar.tx, foo/bar.txt, foo/bar/abc.txt, foo/baz.txt, foo/foo/bar/qux.txt, foo/foo/baz/fiz.txt] 
+0

Благодаря @Gary для быстрого реагирования. С вашим кодом я мог бы получить файлы с иерархией каталогов. Мне нужно опросить и получить файлы, когда он обновляется на удаленном сервере, как мне это сделать с исходящим шлюзом. В принципе мне нужно синхронизировать локальные файлы (с древовидная структура нетронутая) с пультом дистанционного управления. – user2654631

+0

Если вы установили 'FileExistsMode' в IGNORE, каждый MGET получит только новые файлы, которые ранее не были извлечены. Версия 5.0 будет иметь [новый режим] (https://github.com/spring-projects/spring-integration/pull/2062) 'REPLACE_IF_MODIFIED', который будет восстанавливать файлы, которые существуют, но имеют разные временные метки (вчера я создал PR). Другим возможным решением для вас является использование [smart poller] (http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#__smart_polling) с входящим адаптером и изменение удаленного и локальные каталоги, когда опрос возвращает null. –

Смежные вопросы