检查 Spring Integretion FTP 中的被动端口

问题描述 投票:0回答:1

https://medium.com/nerd-for-tech/retriving-files-from-ftp-server-using-spring-integration-5ccc4a972eaf

我正在基于上述站点实现 FTP 行为。 在上面的站点中,我只在 ftp 设置中添加了被动模式。

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

    sf.setHost(host);
    sf.setPort(port);
    sf.setUsername(username);
    sf.setPassword(password);
    sf.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE);
    return sf;
}

我想在实际通信时检查被动端口。

@ServiceActivator(inputChannel = "ftpMGET")
@Bean
public FtpOutboundGateway getFiles() {
    DefaultFtpSessionFactory ftpSessionFactory = sf();
    FtpOutboundGateway gateway = new FtpOutboundGateway(ftpSessionFactory, "mget", "payload");
    gateway.setAutoCreateDirectory(true);
    gateway.setLocalDirectory(new File(downloadPath));
    gateway.setFileExistsMode(FileExistsMode.APPEND);
    gateway.setFilter(new AcceptOnceFileListFilter<>());
    gateway.setOutputChannelName("fileResults");
    gateway.setOption(AbstractRemoteFileOutboundGateway.Option.RECURSIVE);

    System.out.println(ftpSessionFactory.getSession().getClientInstance().getPassivePort());
    return gateway;
}

最后,我添加了一个带有System.out.println的passivePort。

一直显示-1,但是从真实服务器下载文件时如何检查被动端口?!

spring ftp spring-integration ftp-client passive-mode
1个回答
0
投票

在您转移任何内容之前,

FTPClient.getPassivePort
无法返回任何实际值。每次传输使用不同的(被动)端口。在您实际传输任何内容之前,不涉及被动端口。

正如FTPClient.getPassivePort

方法
文档所说:

此方法仅在调用

enterLocalPassiveMode()
后打开数据连接后返回有效值。这是因为 FTPClient 仅在打开数据连接之前才向服务器发送 PASV 命令,而不是在您调用
enterLocalPassiveMode()
时发送。

© www.soinside.com 2019 - 2024. All rights reserved.