2012-05-10 48 views
2

Apache Commons FTPClient 3.1を使用して簡単なファイルアップロードを行っています。 storefile()は、より小さいサイズ(100MB未満)のファイルでうまく動作しますが、100MBを超えるファイルをアップロードしようとするとアップロードが終了するだけです。大きなファイルをアップロードした後、Commons FTPClientがハングアップする

他の人のようにパッシブモードに入ってみましたが、問題を解決していないようです。私は同じ結果を持つ複数のFTPサーバーを試したので、私はそれがホストではないと推測しています。

は、ここで私がやっているの要旨です:

ftpClient.connect(...); 
ftpClient.login(...); 
ftpClient.enterLocalPassiveMode(); 
boolean success = ftpClient.storeFile(...); 
if(success) 
... 

プログラムは、大きなファイルの4行目でハングが、正常にファイルをアップロードありません。

答えて

6

https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html

そのタイミングアウト。このリンクは役に立ちます。

制御チャネルキープアライブ機能: ファイル転送中は、データ接続はビジー状態ですが、制御接続はアイドルです。 FTPサーバーは、制御接続が使用中であることを知っているため、アクティビティが不足しても接続を閉じることはできませんが、ネットワーク・ルーターが制御およびデータ接続が互いに関連していることを知ることは非常に困難です。一部のルータでは、制御コネクションをアイドルとして扱い、データ接続上の転送にルータの許容アイドル時間より長い時間がかかると切断します。 これに対する1つの解決策は、ルータのアイドルタイマーをリセットするために制御接続を介して安全なコマンド(すなわちNOOP)を送ることである。

ftpClient.setControlKeepAliveTimeout(300); // set timeout to 5 minutes 

これは、約5分ごとにNOOPを送信するファイルのアップロード/ダウンロード方法を引き起こします。

+0

ありがとうございました。それが問題でした。 – JPL

関連する問題