首页 > 解决方案 > 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();     
    }
}

上面的代码开始在 ftp 站点创建一个 sample.txt.writing 文件,但大小保持 0KB 大约 15 秒,然后文件消失。

没有提出任何例外。

不知道为什么 ftp 无法完全写入文件。请帮忙。

提前致谢。

标签: spring-bootftpspring-integration

解决方案


感谢加里的反馈。

最后通过以下方式解决:

  1. factory.setClientMode(2) -- 被动模式
  2. 防火墙(Windows 防火墙),允许 0-65000 个端口(出站)用于 ftp 服务器上的 TCP

像魅力一样工作。


推荐阅读