3

私は Apache Commons FTPClient 3.1 を使用して単純なファイルのアップロードを行っています。storefile() は、小さいサイズ (100MB 未満) のファイルでは正常に機能しますが、100MB を超えるファイルをアップロードしようとすると、アップロードは終了しますが、ハングアップします。

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

私がやっていることの要点は次のとおりです。

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

大きなファイルの場合、プログラムは 4 行目でハングしますが、ファイルは正常にアップロードされます。

4

1 に答える 1

7

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 を送信します。

于 2012-05-10T08:41:09.813 に答える