7

Java から FTP/HTTP 経由でいくつかの巨大なファイル (数ギグ) を取得する必要があります。ダウンロードを容易にする準備ができているライブラリ (Java / コマンド ライン ツール) はありますか? いくつかの明白な要件は次のとおりです。

  1. マルチ接続ダウンロード - ダウンロードを高速化するために、サーバーへの複数の接続を開くことができる必要があります (FlashGet/GetRight/... など)。
  2. ダウンロードを再開する

編集- そのようなライブラリを作成するのではなく、既存のテスト済みの製品グレードのライブラリを盗む (または支払う) ことを本当に望んでいます。HTTPおよびFTPサイトからファイルをダウンロードする必要があるため、rsynchは関係ありません。内部ファイル転送用ではありません。

4

2 に答える 2

2

HTTP プロトコルは、オフセットで部分ダウンロードを開始することをサポートしていますが、ファイルのローカル部分バージョンを検証して、最後にジャンクが添付されていないこと (または同様のもの) を確認することのサポートは制限されています。ご使用の環境で許可されている場合rsyncは、 --partial オプションを使用することをお勧めします。コマンドラインからこの種の機能をサポートするように設計されています。

rsync を使用できない場合は、Commons-HTTPClient を操作し、Range HTTP ヘッダーを利用して、扱いやすいサイズのチャンクをダウンロードしてみてください。

于 2009-10-31T16:53:35.157 に答える
2

Java でソケットとスレッドを作成する方法を知っていれば、それほど難しくありません。

最初にリクエストを作成し、ヘッダーを読み取ってヘッダーを取得しContent-lengthます。次に、リクエストを各リクエストを 500K などのチャンクに分割する戦略を考案します。次に、リクエストごとにスレッドを使用して、たとえば 10 個のリクエストを開始します。各リクエストで、Rangeヘッダーを定義する必要があります。

ダウンロードを再開するには、まだダウンロードしていない範囲を保存する必要があります。使用されているプロトコルを十分に理解したい場合は、この HTTP/1.1 ヘッダー フィールド RFCをここで読むことをお勧めします。

ただし、簡単な方法を探している場合は、rsync または scp で十分です。

于 2009-10-31T17:09:02.740 に答える