Исходящий адаптер ftp | Не удается записать на ftp

@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 не может полностью записать файл. Пожалуйста помоги.

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

это должно что-то делать с clientMode, я попытался установить его на 2 и получил исключение тайм-аута соединения. Может кто-нибудь объяснить, что это за настройка?

Guru 06.12.2018 14:04
slacksite.com/other/ftp.html Вообще говоря, пассивный необходим, если задействованы брандмауэры.
Gary Russell 06.12.2018 15:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
2
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме