問題タブ [apache-commons-net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Apache commons-net での FTP プロキシの使用
Apache の commons-net でプロキシ サーバーを使用して FTP 接続をセットアップしたいと考えています。
しかし、これを見ると、FTPClient は FTP プロキシ サーバーを介した FTP 接続をサポートしていますか? 心配です。
私はシステム プロパティをいじる必要があり、Sun のドキュメントには、「socksProxyHostが指定されている場合、すべての TCP ソケットは SOCKS プロキシ サーバーを使用して接続を確立するか、接続を受け入れる」と記載されています。
え?すべての TCP ソケット? データベース接続はどうなりますか? または、プロキシを使用せずに同時に開きたい他の FTP 接続はありますか? それらはすべて影響を受けますか?
アプリケーションの残りの部分を台無しにしない他の方法はありますか?
java - CommonsNetFTPClientが読み取り時にブロックするのを検出または防止します
Commons NetFTPClient
クラスを使用して、定期的にftpサイトをポーリングし、ファイルをダウンロードしようとしています。サイトから読み込もうとすると、スレッドが無期限にブロックされることがあります。他の誰かがこの問題に遭遇し、回避策を提供できるかどうか疑問に思いました。
FTPClient
のメソッドを使用retrieveFileStream(String)
してInputStreamへのハンドルを取得し、そこから読み取ろうとしています。以下は、ブロックされたスレッドの部分的なスタックトレースです。
ant - Anttelnetは単純なタスクにぶら下がっています
これが、build.xmlファイルにあるコードです。ant(バージョン1.8、bash)を実行すると(commons-net-2.0およびjakarta-oro-2.0.8のjarファイルをダウンロードしてコピーしました)、次の出力が得られます。
そしてそれはただそこに座っています。サーバーで「who」を実行すると、ログインを待機している「System」が表示されます。しかし、これ以降の進展はありません。通常のtelnet手段(パテ、bashなど)を使用してサーバーにtelnet接続できます。
読み取り/書き込みの代わりに完全なtelnetコマンドを試しました。
どんな助けでも大歓迎です!
Note: JRE 1.5, Ant 1.8, commons-net version 2.0, jakarta version 2.0.8
ant - antftpはサブディレクトリ内のファイルをダウンロードしません
antを使用してftpサーバーからサブディレクトリ内のファイルをダウンロードしようとしています。ファイルの正確なセットは既知です。それらのいくつかはサブディレクトリにあります。Antは、ルートディレクトリにあるものだけをダウンロードしているようです。リストせずにすべてのファイルをダウンロードすると機能します。
最初のftpアクションは、2番目のアクションとまったく同じことを実行する必要があります。代わりに、「隠しファイル\\ a\a.txtはシンボリックリンクではないと見なされます」というメッセージが表示されます。
ここで何が悪いのか誰か知っていますか?これはantFTPタスクのバグですか?
更新:これに関するバグをCommons Netjirahttps://issues.apache.org/jira/browse/NET-324に投稿しまし た
更新: antバグレポートシステムにバグレポートを追加しましたhttps://issues.apache.org/bugzilla/show_bug.cgi?id=49296
java - apache commons-net FTPClientで生のバイナリを転送しますか?
更新:解決済み
FTPClient.setFileType()
ログインする前に電話をかけていたため、FTPサーバーは何ASCII
に設定してもデフォルトモード( )を使用していました。一方、クライアントは、ファイルタイプが適切に設定されているかのように動作していました。モードは現在、希望どおりに機能しており、すべての場合にファイルをバイト単位で転送します。私がしなければならなかったのは、wiresharkでトラフィックをスニッフィングし、netcatを使用してFTPコマンドを模倣して、何が起こっているかを確認することだけでした。どうして2日前に考えなかったの!?みなさん、ありがとうございました!BINARY
utf-16でエンコードされたxmlファイルがあり、apacheのcommons-net-2.0javaライブラリのFTPClientを使用してFTPサイトからダウンロードしています。これは、2つの転送モードのサポートを提供します。ASCII_FILE_TYPE
とBINARY_FILE_TYPE
、違いは、ASCII
行区切り文字を適切なローカル行区切り記号(または16進数の-またはちょうど)に'\r\n'
置き換える'\n'
こと0x0d0a
です0x0a
。私の問題はこれです:私は以下を含むテストファイル、utf-16でエンコードされています:
<?xml version='1.0' encoding='utf-16'?>
<data>
<blah>blah</blah>
</data>
これが16進数です。
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000a .f.-.1.6.'.?.>..
0000050: 003c 0064 0061 0074 0061 003e 000a 0009 .<.d.a.t.a.>....
0000060: 003c 0062 006c 0061 0068 003e 0062 006c .<.b.l.a.h.>.b.l
0000070: 0061 0068 003c 002f 0062 006c 0061 0068 .a.h.<./.b.l.a.h
0000080: 003e 000a 003c 002f 0064 0061 0074 0061 .>...<./.d.a.t.a
0000090: 003e 000a
.>..
このファイルにモードを使用するとASCII
、バイト単位で正しく転送されます。結果は同じmd5sumになります。素晴らしい。BINARY
バイトをからにシャッフルする以外に何もしないはずの転送モードを使用するInputStream
とOutputStream
、改行(0x0a
)がキャリッジリターン+改行ペア(0x0d0a
)に変換されます。バイナリ転送後の16進数は次のとおりです。
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000d .f.-.1.6.'.?.>..
0000050: 0a00 3c00 6400 6100 7400 6100 3e00 0d0a ..<.d.a.t.a.>...
0000060: 0009 003c 0062 006c 0061 0068 003e 0062 ...<.b.l.a.h.>.b
0000070: 006c 0061 0068 003c 002f 0062 006c 0061 .l.a.h.<./.b.l.a
0000080: 0068 003e 000d 0a00 3c00 2f00 6400 6100 .h.>....<./.d.a.
0000090: 7400 6100 3e00 0d0a
t.a.>...
改行文字を変換するだけでなく(変換すべきではありません)、utf-16エンコーディングを尊重しません(変換する必要があることを認識しているとは限りません。単なるFTPパイプです)。結果は、バイトを再調整するための追加の処理なしでは読み取ることができません。モードを使用するだけASCII
ですが、アプリケーションは実際のバイナリデータ(mp3ファイルとjpegイメージ)も同じパイプ上で移動します。BINARY
これらのバイナリファイルで転送モードを使用する0x0d
と、コンテンツにランダムなsが挿入されますが、バイナリデータには正当な0x0d0a
シーケンスが含まれていることが多いため、安全に削除することはできません。これらのファイルでモードを使用するASCII
と、「賢い」0x0d0a
0x0a
私の質問は次のとおりだと思います:いまいましいバイトをそこからここに移動するだけのJava用の優れたFTPライブラリを知っている人はいますか、それともapachecommons-net-2.0をハックして維持する必要がありますかこの単純なアプリケーション専用の自分のFTPクライアントコード?他の誰かがこの奇妙な行動に対処しましたか?任意の提案をいただければ幸いです。
BINARY
commons-netのソースコードを確認しましたが、モードを使用した場合の奇妙な動作の原因ではないようです。しかし、モードInputStream
での読み取りは、ソケットにラップされているだけです。これらの低レベルのJavaストリームは、奇妙なバイト操作を行うことがありますか?彼らがそうしたら私はショックを受けるでしょう、しかし私はここで他に何が起こっているのか分かりません。BINARY
java.io.BufferedInptuStream
InputStream
編集1:
これは、ファイルをダウンロードするために私が行っていることを模倣した最小限のコードです。コンパイルするには、
実行するには、ファイルをダウンロードするためのディレクトリ/ tmp/asciiと/tmp/ binary、およびファイルが置かれたftpサイトが必要です。コードは、適切なftpホスト、ユーザー名、およびパスワードを使用して構成する必要もあります。このファイルをtest/フォルダーの下のtestingftpサイトに置き、ファイルtest.xmlを呼び出しました。テストファイルには、少なくとも1行以上が含まれ、utf-16でエンコードされている必要があります(これは必要ない場合もありますが、正確な状況を再現するのに役立ちます)。新しいファイルを開いた後にvimの:set fileencoding=utf-16
コマンドを使用し、上記のxmlテキストを入力しました。最後に、実行するには、
コード:
(注:このコードは、以下の「編集2」の下にリンクされているカスタムFTPClientオブジェクトを使用するように変更されています)
編集2:
さて、私はCheckedXputStream
アドバイスに従いました、そしてここに私の結果があります。FTPClient
と呼ばれるapacheのコピーを作成し、チェックサムを使用してとのMyFTPClient
両方をラップしました。さらに、出力をチェックサム付きで保存するために与えるものをラップしました。MyFTPClientのコードはここに投稿されており、このバージョンのFTPClientを使用するように上記のテストコードを変更しました(変更されたコードに要点URLを投稿しようとしましたが、複数のURLを投稿するには10レピュテーションポイントが必要です!)、そして結果はこうだった:SocketInputStream
BufferedInputStream
CheckedInputStream
CRC32
FileOutputStream
FTPClient
CheckOutputStream
CRC32
test.xml
test.mp3
対応するファイルのmd5sumは次のとおりであるため、これは基本的にまったく意味がありません。
私は途方に暮れています。このプロセスのどの時点でもファイル名/パスを並べ替えていないことを誓います。また、すべてのステップをトリプルチェックしました。それは単純なことであるに違いありませんが、私は次にどこを見るべきかについて最も霧深い考えを持っていません。実用性のために、FTP転送を行うためにシェルに呼び出して続行しますが、何が起こっているのかを理解するまでこれを追求するつもりです。私はこのスレッドを私の発見で更新します、そして私は誰もが持っているかもしれないどんな貢献にも感謝し続けます。うまくいけば、これはいつか誰かに役立つでしょう!
java - FTPを使用してJavaで1回の呼び出しで複数レベルのディレクトリを作成する方法
Apache の FTPClient ライブラリを使用していますが、複数レベルの深さの新しいディレクトリを作成する簡単な方法がわかりません。何か不足していますか?
ディレクトリ /tmp がリモート ホストに既に存在すると仮定すると、次のコマンドは /tmp/xxx の作成に成功します。
しかし、以下は失敗します:
後者の場合、 /tmp/yyy さえ作成されません。
/tmp/yyy を作成してから /tmp/yyy/zzz を作成できることはわかっていますが、/tmp/yyy/zzz を直接作成する方法がわかりません。
明らかな何かが欠けていますか?makeDirectory の代わりに mkd を使用しても役に立ちませんでした。
また、ディレクトリ /tmp/yyy/zzz/ がまだ存在しない場合、1 回の呼び出しでファイルを /tmp/yyy/zzz/test.txt にアップロードできますか?
java - Apache CommonsNetFTPは破損したファイルをアップロードしています
FTPファイル転送にApacheCommonsNetを使用しようとしています。
問題は、ファイルがサーバーに断続的に到着していることです。「破損」とは、WinRARがZIPファイルに「予期しないアーカイブの終わり」があることを通知することを意味します。ファイルが完全に空になる場合があります。これは大きなファイル(100kb以上)でより多く発生しますが、小さなファイル(20kb)でも発生することに気づきました。
アップロードされているソースzipファイルが有効で、243kbしかないことを知っています。
コードからエラー/例外は発生しません。
実行されているコードは次のとおりです。
およびいくつかのログ:
これらはすべて15秒以内に完了し、サーバー上の結果のファイルはすべて破損していることに注意してください。
また、タイムアウトを設定せずにテストしましたが、問題は引き続き発生します。
java - "LIST" で FTP 接続が "ハング" する
全て、
リモート ftp サーバーに問題があり、今から 3 日間忙しくしています。:(
少し前に、apache commons-net 2.0 を使用する単純な ftp 取得クラスを作成しました。このクラスは 5 つの異なる ftp サーバーで正常に動作し、必要に応じてデータを取得できます。現在、接続する必要があるサーバーに出くわしましたが、ディレクトリを一覧表示したり、データを取得したりできません。
これは、私のクラスによって送信および取得されるコマンドの順序です。
最後の行で、コードが無期限にハングします (コードがブロックされるまで 2 時間待った後、コードを強制終了しました)。アクティブな接続の使用からASCIIタイプの設定、さまざまなftpライブラリの使用まで、すべてを試しましたが、常に同じ結果が得られました。
通常、私は彼らに電話して、サーバーが正しく構成されていないことを伝えます。ただし、FileZilla 経由の接続は機能するだけでなく、非常に高速で、問題が発生することはありません。また、Linux でコマンド ライン経由で接続するのも魅力的です。
私はここで完全に迷っています。なぜ私がこの問題を抱えているのか、誰にも考えがありますか?
乾杯
java - commons net ftp の問題
FTP 接続は正しく、エラーも受信されていないように見えますが、ファイルが ftp サーバーに配置されていないという問題に直面しています。
commons-net-ftp を使用しています。
コード:
ログ ファイルのトレース:
2010-10-12 10:57:53,527 INFO [STDOUT] 230 正常にログインし
まし
たモード (216,27,89,17,10,231)
2010-10-12 10:57:53,624 INFO [STDOUT] STOR SharperImageFeed2.txt
2010-10-12 10:57:53,681 INFO [STDOUT] 150 "/SharperImageFeed2.txt " ファイルを ASCII モードで受信する準備ができました
2010-10-12 10:57:54,337 INFO [STDOUT] 226 転送が正常に終了しました。
2010-10-12 10:57:54,337 INFO [STDOUT] QUIT
2010-10-12 10:57:54,384 INFO [STDOUT] 221 Windows FTP サーバー (Texas Imperial Software による WFTPD) が別れを告げる
問題が何であるかについて何か提案はありますか? 実行できるテストはありますか?
FileZilla を使用してファイルを ftp およびアップロードできます。
さらにテストを行うと、ローカルの開発環境 (Windows (Eclipse/JBoss)) から実行すると、FTP プットを正常に実行できますが、FTP が本番サーバー (Linux/JBoss) から実行されると、トレースはは成功しますが、FTP サーバーには何も配置されません。
ant - Maven の Ant FTP タスクを介してファイルをアップロードする
Ant タスクを使用してファイルをアップロードしようとしています。Ant を直接使用するとファイルがアップロードされますが、Maven 経由で ( を使用してmaven-antrun-plugin
) Ant タスクを呼び出すと、次のエラーが発生します。
Ant BuildException has occurred: この行の実行中に次のエラーが発生しました:
ant-commonsnet.jar は明らかに Ant で利用可能です:
Ant クラスパスは maven-antrun-plugin 用に個別に定義されていますか、それとも何か不足していますか?