JAVAでFTPを使用してファイルを転送しています。 私はFTPClientとFTPServerをApacheから使用しています。しかし、特定の環境では、ファイルが転送されないことがあります。 enterLocalPassiveModeメソッドをFTPClientからログインメソッド呼び出しの前に呼びますが、ファイルが転送されないことがあります。FTPを使用してファイルを転送する際の問題Apache Javaの実装
- storeFileメソッドは "false"を返します。
- getReplyStringメソッドは、 "200 Command TYPE okay"を返します。
- リストメソッドは "227"を返します。
ファイルが正常に転送されます。
- リスト方法は150
- を返しgetReplyString方法は「大丈夫150のファイルの状態を、データ接続をオープンしよう」を返します。
クライアントコード:
this.getFtpClientUtil().connect(settingsService.getServer(), settingsService.getFtpServerCommandChannelPort());
int reply = this.getFtpClientUtil().getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
logger.error("Fail to connect to FTP Server");
this.getFtpClientUtil().disconnect();
isConnect = false;
return false;
}
logger.info("FTP Server connected successfully");
this.getFtpClientUtil().enterLocalPassiveMode();
isConnect = this.getFtpClientUtil().login(settingsService.getftpUsername(), settingsService.getftpPassword());
サーバコード:
// Data Configuration
this.dataConfigurationFactory = new DataConnectionConfigurationFactory();
dataConfigurationFactory.setPassiveAddress(this.ipAddress);
dataConfigurationFactory.setPassiveExternalAddress(this.ipAddress);
dataConfigurationFactory.setPassivePorts(this.settingsService.getFtpServerTransferChannelPort());
// Listener
listenerFactory = new ListenerFactory();
listenerFactory.setPort(this.settingsService.getFtpServerCommandChannelPort());
listenerFactory.setDataConnectionConfiguration(dataConfigurationFactory.createDataConnectionConfiguration());
// Desliga SSL
listenerFactory.setImplicitSsl(false);
// User
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
UserManager um = userManagerFactory.createUserManager();
this.serverFactory = new FtpServerFactory();
serverFactory.addListener("default", listenerFactory.createListener());
serverFactory.setUserManager(um);
UserFactory userFactory = new UserFactory();
userFactory.setName(this.settingsService.getftpUsername());
userFactory.setPassword(this.settingsService.getftpPassword());
userFactory.setMaxIdleTime(60);
final String absolutePath = this.settingsService.getftpHomeDirectory();
userFactory.setHomeDirectory(absolutePath);
userFactory.setAuthorities(Arrays.asList((Authority) new WritePermission()));
User user = userFactory.createUser();
um.save(user);
// Connection Config
connectionConfigFactory = new ConnectionConfigFactory();
connectionConfigFactory.setAnonymousLoginEnabled(false);
connectionConfigFactory.setMaxLogins(100);
serverFactory.setConnectionConfig(connectionConfigFactory.createConnectionConfig());
これはファイアウォールの問題ですか?
Iが設定しようとしたパッシブポートは、DataConnectionConfigurationFactoryクラスからsetPassivePorts方法を使用して、サーバ側での範囲が、問題は継続します。
クライアント側でポート範囲を設定するフォームはありますか。 接続が実際にパッシブモードを使用しているかどうかを確認するにはどうすればよいですか?
ありがとうございます。
投稿を編集し、問題を引き起こす最小限のコードセットを含めます。 – Mike
また、javaコマンドラインに-Djavax.net.debug = allを追加することもできます。これにより、ネットワークトラフィックが表示されます – Mike
コードと質問を破棄しないでください。 –