代码之家  ›  专栏  ›  技术社区  ›  Guru

ftp出站适配器无法写入ftp

  •  1
  • Guru  · 技术社区  · 6 年前
    @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为什么不能完全写入文件。请帮忙。

    事先谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Guru    6 年前

    感谢Gary的反馈。

    最终解决了以下问题:

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

    工作很有魅力。