【问题标题】:Ftp outbound adapter | Fails to write to ftpFtp 出站适配器 |无法写入 ftp
【发布时间】:2018-12-06 11:55:56
【问题描述】:
@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 无法完全写入文件。请帮忙。

提前致谢。

【问题讨论】:

  • 这与clientMode有关,我尝试将其设置为2并得到连接超时异常。谁能解释一下这个设置是什么?
  • slacksite.com/other/ftp.html一般来说,如果有防火墙,就需要被动。

标签: spring-boot ftp spring-integration


【解决方案1】:

感谢加里的反馈。

最终解决了以下问题:

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

工作就像一个魅力。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多