2009-06-30 149 views
0

私たちのプロジェクトの1つでは、ApacheのFTPクライアントAPIを使用しています。 xmlファイルをFTPサーバーにアップロードする必要があります。このFTPサーバーでは、プロセスがサーバーディレクトリをポーリングし続けます。したがって、アップロードAPIを使用して、.TRANSFER拡張子を持つxmlファイルをアップロードしていて、完全なファイルを正常にアップロードした後、ファイルは.xmlファイルに名前が変更されます。FTPアップロードの問題 - 0バイトの転送

私が直面している奇妙な問題は、ファイルのファイルサイズが0バイトであることがあります。同じファイルが完全にアップロードされることがあります。ログファイルを見ると、転送されるバイトは0 kbのみです。だから私は何が問題になるのかはわかりません。

私は、LinuxサーバーとApacheのコモンズのFTPクライアントAPIを使用しています。

デバッグのヒントとテクニックが役立ちます。

よろしく、 スリニバス

答えて

0

WireSharkのを実行してみてください、ワイヤ全体で起こっているかを見ますか?それは問題がどこにあるのかという手がかりを与えるかもしれません。

http://www.wireshark.org/

1

それが時々発生した場合、それは、端部の一方のファイアウォールの設定のようなにおいがします。診断は難しいですが、アクティブ/パッシブの切り替えを試してみてください。より良い参照のためにここに

ルック:http://slacksite.com/other/ftp.html

3

私もしばらく前にこれに走りました。

ファイルが特定のサイズ(私の場合は174バイト程度)より大きかった場合、正しく転送されていることに気付きました。小さなファイルはゼロバイトファイルとして作成されました。

私はそれがApache commons ftpコードのバグだと思います。私はソースを取得してそれを修正し、迅速に修正し、私が構築した結果の瓶が私たちのために働いた。

私が修正権を覚えていれば、コモンズのftpコードでの転送に使用されていたソケットで、Nagleのアルゴリズムをsocket.setTcpNoDelay(false)で無効にしました。

1

ファイアウォール設定の問題:iptablesが設定されたlinux/unixボックスからftp接続する場合は、ftpの「接続追跡」を許可するようにテーブルが設定されていることを確認してください。

ftpトランザクションの過程で、クライアントマシンはftp接続を確立し、ftp STORコマンドを発行してファイルをアップロードします。トランザクションの最初の部分は標準ftpソケット(20,21)で行われ、ACTIVEモードの場合はftpサーバーによって選択されたランダムな番号の高い番号のポートに切り替えられます。パッシブ(PASV)モードの場合はクライアントによって切り替えられます。 ACTIVEモードの場合、iptablesはこの無作為に選択されたポートでクライアントマシンと通信することをサーバに許可しないかもしれません。正しい名前で他のデータを持たないゼロバイトファイルが得られます。

あなたは、クライアント側から、または「接続の追跡」を行うには、クライアントマシン上でのiptablesを設定することにより、パッシブモードへトランザクションを切り替えることで、この問題を解決することができます

http://www.linuxchix.org/content/courses/security/connection_tracking

0

は、あなたのディスク容量を確認してください。私はラズベリーパイプロジェクトに取り組んでいたときにこのような状況に直面しました。私は大きなファイルのダウンロードを処理しなければならず、RPiのSDカードを非常に速くいっぱいにしました。ある程度までFTPにアップロードされた後、0バイトのファイルがアップロードされます。 小規模なストレージだけでなく、どこでも発生する可能性があります。たとえば、サーバーでは、ギガバイトのエラーログファイルを作成できます。しばらくすると、あなたのサーバースペースはそれらのログファイルで満たされます。 FTPアップロードでも同じことが起こります。それもチェックしてください。乾杯!

関連する問題