@EnableIntegration
@Configuration
public class RtwEmploymentComplianceFlow {


@Bean
DefaultFtpSessionFactory rtwFtpFileSessionFactory() {
    DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();

    sf.setPort(21);
    sf.setUsername("a-asdf");
    sf.setPassword("asdf@123");
    sf.setHost("asdf.ftp.org");

    return sf;
}

@Autowired
TiffToPdfConverter tiffToPdf;

@Bean
public IntegrationFlow rtwFlow(
        @Value("${rtw-input-directory}") File rtwFolder, DefaultFtpSessionFactory rtwFtpFileSessionFactory) {
    GenericTransformer<File, Message<String>> pdfFileConverter = (File source) -> {

        return MessageBuilder.withPayload("hello").setHeader(FileHeaders.FILENAME, source.getName().split("\\.")[0] + ".txt").build();
    };

    return IntegrationFlows
            .from(Files.inboundAdapter(rtwFolder)
                    .autoCreateDirectory(true)
                    .preventDuplicates(true)
                    .patternFilter("*.tif"), 
                    poller -> poller.poller(pm -> pm.fixedDelay(1000)))
            .transform(File.class, pdfFileConverter)
            .handle(Ftp.outboundAdapter(rtwFtpFileSessionFactory)
                        .remoteDirectory("Guru")
                        .useTemporaryFileName(false)
                        .fileNameGenerator(message -> {
                            Object o = message.getHeaders().get(FileHeaders.FILENAME);
                            String fileName = String.class.cast(o);
                            System.out.println("output FileName is: " + fileName);

                            return fileName;
                        })
                    )
            .get();     
    }
}

Приведенный выше код начинает создание файла sample.txt.writing на сайте ftp, но его размер остается 0 КБ примерно на 15 секунд, а затем файл исчезает.

Нет никаких исключений.

Не уверен, почему ftp не может полностью записать файл. Пожалуйста помоги.

Заранее спасибо.

1
Guru 6 Дек 2018 в 14:55

1 ответ

Лучший ответ

Спасибо Гэри за ваш отзыв.

В конце концов решил это следующим образом:

  1. factory.setClientMode (2) - пассивный режим
  2. брандмауэр (брандмауэр Windows), разрешенные порты 0-65000 (исходящие) для TCP на ftp-сервере

Работал как шарм.

2
Guru 6 Дек 2018 в 15:33