我正在基于上述站点实现 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,但是从真实服务器下载文件时如何检查被动端口?!
在您转移任何内容之前,
FTPClient.getPassivePort
无法返回任何实际值。每次传输使用不同的(被动)端口。在您实际传输任何内容之前,不涉及被动端口。
方法的文档所说:
后打开数据连接后返回有效值。这是因为 FTPClient 仅在打开数据连接之前才向服务器发送 PASV 命令,而不是在您调用enterLocalPassiveMode()
时发送。enterLocalPassiveMode()