第53章 FTP2


FTP/SFTP コンポーネント

このコンポーネントは、FTP プロトコルおよび SFTP プロトコルを介してリモートファイルシステムへのアクセスを提供します。
リモート FTP サーバーからの消費
ファイルの使用に関する詳細については、以下の ファイルを使用する際の Default というセクションを必ずお読みください。
注記
絶対パスはサポートされていません。Camel 2.16 は、directoryname から先頭のスラッシュをすべてトリミングすることにより、絶対パスを相対に変換します。WARN メッセージがログに出力されます。

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

URI 形式

ftp://[username@]hostname[:port]/directoryname[?options]
sftp://[username@]hostname[:port]/directoryname[?options]
ftps://[username@]hostname[:port]/directoryname[?options]
Copy to Clipboard Toggle word wrap
directoryname は基礎となるディレクトリーを表します。ネストされたフォルダーを含めることができます。ディレクトリー名は相対パスです。絶対パスはサポートされていません。相対パスには、ネストされたフォルダーを含めることができます(例: /inbox/usCamel 2.16 では、autoCreate オプションがサポートされます。コンシューマーが起動すると(ポーリングがスケジュールされる前)、指定されたディレクトリーが自動的に作成されます。autoCreate のデフォルト値は true です。
ユーザー 名を指定しないと、パスワードなしで 匿名 ログインが試行されます。ポート 番号が指定されていない場合、Apache Camel はプロトコルに従ってデフォルト値を提供します(ftp = 21、sftp = 22、ftps = 21)。
このコンポーネントは、実際の FTP 作業に 2 つの異なるライブラリーを使用します。FTP および FTPS は Apache Commons Net を使用し、SFTP は JCraft JSCH を使用します。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

URI オプション

以下のオプションは FTP コンポーネント専用です。
Expand
名前 デフォルト値 説明
username null リモートファイル systen へのログインに使用するユーザー名を指定します。
password null リモートファイルシステムへのログインに使用するパスワードを指定します。
アカウント null Camel 2.15.2: リモート FTP サーバーへのログインに使用するアカウントを指定します(FTP および FTP Secure のみ)。
binary false ファイル転送モードを BINARY または ASCII で指定します。デフォルトは ASCII (false)です。
disconnect false Camel 2.2: 使用直後にリモート FTP サーバーから切断するかどうか。コンシューマーとプロデューサーの両方に使用できます。disconnect は、FTP サーバーへの現在の接続を切断するだけです。停止するコンシューマーがある場合は、代わりにコンシューマー/ルートを停止する必要があります。
localWorkDirectory null 使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。詳細は、こちらを参照してください。
passiveMode false FTP のみ: パッシブモード接続を使用するかどうかを指定します。デフォルトはアクティブモード {false)です。
securityProtocol TLS
FTPS のみ: 基礎となるセキュリティープロトコルを設定します。TLS: Transport Layer Security SSL: Secure Sockets Layer の値を定義します。
disableSecureDataChannelDefaults false Camel 2.4: FTPS のみ: セキュアなデータ転送を使用する場合に execPbsz および execProt のデフォルト値の使用を無効にするかどうか。このオプションを true に設定するには、execPbsz オプションおよび execProt オプションを明示的に設定する必要があります。
ダウンロード true Camel 2.11: FTP コンシューマーがファイルをダウンロードするかどうか。このオプションを false に設定すると、メッセージボディーは null になりますが、コンシューマーはファイル名、ファイルサイズなどのファイルの詳細が含まれる Camel Exchange をトリガーします。ファイルがダウンロードされないだけです。
streamDownload false Camel 2.11: コンシューマーが前もってファイル全体をダウンロードするか、デフォルトの動作では、インメモリーアレイではなくリモートリソースから InputStream エドを amel Exchange の本文として渡す必要があるかどうかは無視されます。ダウンロードが false r が localWorkDirectory の場合は無視されます。このオプションは大きなリモートファイルで作業する場合に便利です。
execProt null
Camel 2.4: FTPS のみ: セキュアなデータチャネルのデフォルトが無効でない場合は、デフォルトでオプション P を使用します。以下の値が使用できます。
  • C: Clear
  • s: Safe (TLS プロトコルのみ)
  • e: 機密(TLS プロトコルのみ)
  • P: プライベート
execPbsz null Camel 2.4: FTPS のみ: このオプションは、セキュアなデータチャネルのバッファーサイズを指定します。useSecureDataChannel オプションが有効で、このオプションが明示的に設定されていない場合、値 0 が使用されます。
isImplicit false FTPS のみ - セキュリティーモードを設定します (implicit/explicit)。デフォルトは明示的です(false)。
knownHostsFile null SFTP のみ: known_hosts ファイルを設定して、SFTP エンドポイントがホストキーの検証を実行できるようにします。
knownHostsUri null SFTP のみ:Camel 2.11.1: known_hosts ファイル(デフォルトではクラスパスからロード)を設定し、SFTP エンドポイントがホストキーの検証を実行できるようにします。
keyPair null SFTP のみ:Camel 2.12.0: SSH 公開鍵認証用の Java KeyPair を設定し、DSA キーまたは RSA 鍵をサポートします。
privateKeyFile null SFTP のみ: SFTP エンドポイントが秘密鍵を検証できるように秘密鍵ファイルを設定します。
privateKeyUri null SFTP のみ:Camel 2.11.1: 秘密鍵ファイル(デフォルトではクラスパスからロードされる)を SFTP エンドポイントが秘密鍵の検証を実行できるように設定します。
privateKey null SFTP のみ:Camel 2.11.1: SFTP エンドポイントが秘密鍵を検証することができるように、秘密鍵を byte[] に設定します。
privateKeyFilePassphrase null SFTP のみ: 秘密鍵ファイルのパスフレーズを SFTP エンドポイントが秘密鍵の検証を実行できるように設定します。
privateKeyPassphrase null SFTP のみ:Camel 2.11.1: SFTP エンドポイントが秘密鍵の検証を実行できるように、秘密鍵ファイルのパスフレーズを設定します。
preferredAuthentications null SFTP のみ:Camel 2.10.7、2.11.2、2.12.0: SFTP エンドポイントが使用される優先認証を設定します。たとえば、password,publickey などです。指定しない場合は、JSCH のデフォルトのリストが使用されます。
暗号化 null Camel 2.8.2、2.9: SFTP は、優先順に使用される暗号のコンマ区切りリストのみ を設定します。可能な暗号名は、JCraft JSCH で定義されています。aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-cbc などがあります。指定しない場合は、JSCH のデフォルトのリストが使用されます。
fastExistsCheck false Camel 2.8.2、2.9: このオプションを true に設定すると、camel-ftp はリストファイルを直接使用してファイルが存在するかどうかを確認します。一部の FTP サーバーは直接ファイルの一覧表示をサポートしない可能性があるため、オプションが false の場合、camel-ftp は古い方法を使用してディレクトリーを一覧表示し、ファイルが存在するかどうかを確認します。Camel 2.10.1 以降では、このオプションが readLock=changed に影響し、ファイル情報の更新に高速チェックを実行するかどうかを制御します。FTP サーバーに多くのファイルがある場合に、これを使用してプロセスを迅速化できます。
strictHostKeyChecking いいえ SFTP のみ:Camel 2.2: 厳密なホストキーチェックを使用するかどうかを設定します。使用できる値は noyes、および ask です。Camel は人間の介入を想定して質問に回答できないため、使用は理にかなっています。注記: Camel 2.1 のデフォルトおよび以下では、が 求め られます。
maximumReconnectAttempts 3 リモート FTP サーバーに接続しようとすると、Apache Camel の実行の最大再接続試行を指定します。この動作を無効にするには、0 を使用します。
reconnectDelay 1000 Apache Camel が再接続を試みる前に待機する遅延(ミリ秒単位)。
connectTimeout 10000 Camel 2.4: 接続タイムアウト(ミリ秒単位)です。これは FTP/FTPS の ftpClient.connectTimeout の使用に対応します。SFTP では、接続の試行時にもこのオプションが使用されます。
soTimeout 30000 FTP および FTPS のみ:Camel 2.4: SocketOptions.SO_TIMEOUT の値はミリ秒単位です。
timeout 30000 FTP および FTPS のみ:Camel 2.4: データのタイムアウトはミリ秒単位です。これは FTP/FTPS の ftpClient.dataTimeout の使用に対応します。SFTP の場合、データタイムアウトはありません。
throwExceptionOnConnectFailed false Camel 2.5: 接続に成功し、ログインが確立できない場合に例外を出力するかどうか。これにより、カスタムの pollStrategy は例外に対応できます。たとえば、コンシューマーやのような機能を停止できます。
siteCommand null FTP および FTPS のみ:Camel 2.5: ログインに成功した後にサイトコマンドを実行する。複数のサイトコマンドは、改行文字(\n)を使用して区切ることができます。help site を使用して、FTP サーバーがサポートするサイトコマンドを確認します。
stepwise true ディレクトリーを使用する場合は、ディレクトリーツリーをトラバースするためにステップ単位のモードを使用するかどうかを指定します。Stepwise は、一度に 1 つのディレクトリーが CD になることを意味します。詳細は、「ディレクトリーのステップ的な変更」 を参照してください。
separator UNIX Camel 2.6: ファイルのアップロード時に使用するパスセパレーター char を変更します。auto は、変更せずに指定されたパスを使用することを意味します。UNIX は、UNIX スタイルのパス区切り文字を使用することを意味します。Windows は、Windows スタイルのパス区切り文字を使用することを意味します。
chmod null SFTP プロデューサーのみ: Camel 2.9: 保存したファイルに chmod を設定できます。たとえば、chmod=640 です。
圧縮 0 SFTP のみ: Camel 2.8.3/2.9: 圧縮を使用します。レベルを 1 から 10 に指定します。重要: 圧縮サポートのために必要な JSCH zlib JAR をクラスパスに手動で追加する必要があります。
receiveBufferSize 32768
FTP/FTPS のみ: Camel 2.15.1: ファイルのダウンロード用のバッファーサイズ。デフォルトのサイズは 32KB です。
ftpClient null FTP および FTPS のみ:Camel 2.1: カスタムの org.apache.commons.net.ftp.FTPClient インスタンスを使用できます。
ftpClientConfig null FTP および FTPS のみ:Camel 2.1: カスタムの org.apache.commons.net.ftp.FTPClientConfig インスタンスを使用できます。
serverAliveInterval 0 SFTP のみ:Camel 2.8 では、sftp セッションの serverAliveInterval を設定できます。
serverAliveCountMax 1 SFTP のみ:Camel 2.8 を使用すると、sftp セッションの serverAliveCountMax を設定できます。
ftpClient.trustStore.file null FTPS のみ: トラストストアファイルを設定し、FTPS クライアントが信頼された証明書を検索できるようにします。
ftpClient.trustStore.type JKS FTPS のみ:トラスト ストアのタイプを設定します。
ftpClient.trustStore.algorithm SunX509 FTPS Only: トラストストアアルゴリズムを設定します。
ftpClient.trustStore.password null FTPS のみ:トラスト ストアのパスワードを設定します。
ftpClient.keyStore.file null FTPS のみ: FTPS クライアントがプライベート証明書を検索できるようにキーストアファイルを設定します。
ftpClient.keyStore.type JKS FTPS Only: キーストアタイプを設定します。
ftpClient.keyStore.algorithm SunX509 FTPS Only: キーストアアルゴリズムを設定します。
ftpClient.keyStore.password null FTPS Only: キーストアのパスワードを設定します。
ftpClient.keyStore.keyPassword null FTPS Only: 秘密鍵のパスワードを設定します。
sslContextParameters null FTPS のみ:Camel 2.9: レジストリー の org.apache.camel.util.jsse.SSLContextParameters への 参照。 この参照は、ftpClient で設定された SSL 関連のオプションと、FtpsConfiguration に設定された securityProtocol (SSL、TLS など)を上書きします。 Security Guide および JSSE ユーティリティーの Configuring Transport Security for Camel Components を参照してください
proxy null SFTP のみ:Camel 2.10.7、2.11.1: レジストリー で com.jcraft.jsch.Proxy への 参照。 このプロキシーは、ターゲット SFTP ホストからのメッセージの消費/送信に使用されます。
useList true FTP/FTPS のみ:Camel 2.12.1: コンシューマーが FTP LIST コマンドを使用してディレクトリーの一覧を取得し、どのファイルが存在するかを確認します。このオプションを false に設定すると、stepwise=false を設定し、fileName も固定名に設定する必要があります。そのため、コンシューマーは取得するファイルの名前を認識します。これを行うと、1 つのファイルのみを取得できます。詳細につていは以下をご覧ください
ignoreFileNotFoundOrPermissionError false Camel 2.12.1: ファイルの取得を試みたにも拘らず、存在せず(何らかの理由で)ファイルの取得を試みたときにコンシューマーが無視するかどうか、またはファイルパーミッションが不十分であるために失敗するかどうか。
sendNoop true Camel 2.16: プロデューサーのみ。FTP サーバーにファイルをアップロードする前に、noop コマンドを書き込み前チェックとして送信するかどうか。このオプションは、接続を検証し、サイレント再接続を有効にするためにデフォルトで有効になります。ただし、これで何らかの問題が発生した場合には、このオプションを無効にすることができます。
jschLoggingLevel WARN
SFTP のみ:Camel 2.15.3/2.16: JSCH アクティビティーロギングに使用するログレベル。JSCH はデフォルトで詳細であるため( INFO レベル)、しきい値はデフォルトで WARN に設定されます。
FTPS コンポーネントのデフォルトのトラストストア
FTPS コンポーネントで SSL に関連する ftpClient. プロパティーを使用する場合、トラストストアはすべての証明書を受け入れます。信頼の選択証明書のみが必要な場合は、ftpClient.trustStore.xxx オプションを使用するか、カスタム ftpClient を設定してトラストストアを設定する必要があります。
sslContextParameters を使用する場合、トラストストアは提供される SSLContextParameters インスタンスの設定によって管理されます。
その他のオプション
File のすべてのオプションは FTP2 によって継承されるため、その他のオプションについては、File を参照してください。
ftpClient. または ftpClientConfig. 接頭辞を使用すると、URI から ftpClientConfig および ftp ClientConfig に直接追加オプションを設定できます。
たとえば、FTPClientsetDataTimeout を 30 秒に設定するには、以下を実行できます。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000")
    .to("bean:foo");
Copy to Clipboard Toggle word wrap
たとえば、日付形式やタイムゾーンを設定するために、組み合わせて一致させ、両方の接頭辞を使用できます。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr")
    .to("bean:foo");
Copy to Clipboard Toggle word wrap
これらのオプションはいくつでも使用できます。
可能なオプションと詳細は、Apache Commons FTPClientConfig のドキュメントを参照してください。Apache Commons FTPClient でも同様です。
URL に多くの長い設定がない場合は、レジストリーで Camel ルックアップを許可することで、使用する ftpClient または ftpClientConfig参照 できます。
以下に例を示します。
   <bean id="myConfig" class="org.apache.commons.net.ftp.FTPClientConfig">
       <property name="lenientFutureDates" value="true"/>
       <property name="serverLanguageCode" value="fr"/>
   </bean>
Copy to Clipboard Toggle word wrap
URL で # 表記を使用すると、Camel がこの Bean をルックアップします。
from("ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig").to("bean:foo");
Copy to Clipboard Toggle word wrap

その他の URI オプション

重要
このコンポーネントにも適用されるすべてのオプションについては、File2 を参照してください。

以下は、FTP エンドポイント URI の例です。
ftp://someone@someftpserver.com/public/upload/images/holiday2008?password=secret&binary=true
ftp://someoneelse@someotherftpserver.co.uk:12049/reports/2008/password=secret&binary=false
ftp://publicftpserver.com/download
Copy to Clipboard Toggle word wrap
FTP コンシューマーが同時実行をサポートしない
FTP コンシューマー(同じエンドポイント)は同時実行をサポートしません(バッキング FTP クライアントはスレッドセーフではありません)。複数の FTP コンシューマーを使用して、異なるエンドポイントからポーリングできます。これは、同時コンシューマーをサポートしない単一のエンドポイントのみです。
FTP プロデューサーにはこの問題が ない ため、同時実行をサポートします。
補足情報
このコンポーネントは、File2 コンポーネントの拡張機能です。そのため、File2 コンポーネントページには、他のサンプルと詳細があります。

ファイルの使用時のデフォルト

FTP コンシューマーは、デフォルトで、消費されたファイルがリモート FTP サーバー上で変更されないままにします。ファイルを削除したり、別の場所に移動したりする場合は、明示的に設定する必要があります。たとえば、delete=true を使用してファイルを削除するか、move=.done を使用してファイルを非表示にしたサブディレクトリーに移動できます。
通常の File コンシューマーは、デフォルトでファイルを .camel サブディレクトリーに移動します。FTP コンシューマーに対して Camel はデフォルトでこれを行わないのは、ファイルを移動または削除するためにデフォルトでパーミッションがない可能性があるからです。

limitations

readLock オプションを使用すると、Apache Camel で現在書き込まれているファイルが消費され ない ようにすることができます。ただし、ユーザーに書き込みアクセスが必要であるため、このオプションはデフォルトでオフになっています。FTP 経由で現在書き込まれているファイルを使用しないようにするための他の解決策があります。たとえば、一時的な宛先に書き込みを行い、ファイルを書き込んだ後に移動することができます。
ftp プロデューサーは、既存のファイルへの追加をサポートし ません。リモートサーバー上の既存のファイルは、ファイルが書き込まれる前に削除されます。

メッセージヘッダー

以下のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
Expand
ヘッダー 説明
CamelFileName エンドポイントに送信するときに出力メッセージに使用される出力ファイル名(エンドポイントディレクトリーに対する相対)を指定します。これがなく、式がない場合は、生成されたメッセージ ID がファイル名として使用されます。
CamelFileNameProduced 書き込まれた出力ファイルのパス名。このヘッダーは Apache Camel によって自動的に設定されます。
CamelFileBatchIndex このバッチで使用されるファイルの合計数からの現在のインデックス。
CamelFileBatchSize このバッチで消費されるファイルの合計数。
CamelFileHost リモートホスト名。
CamelFileLocalWorkPath ローカルの作業ディレクトリーが使用されている場合は、ローカルのワークファイルへのパス。
さらに、FTP/FTPS コンシューマーおよびプロデューサーは、以下のヘッダーで Camel Message を強化します。
Expand
ヘッダー 説明
CamelFtpReplyCode Camel 2.11.1: FTP クライアントの応答コード(タイプは整数)
CamelFtpReplyString Camel 2.11.1: FTP クライアントの応答文字列

タイムアウトについて

2 つのライブラリーセット(上記を参照)には、タイムアウトを設定するために異なる API があります。両方の connectTimeout オプションを使用してタイムアウトをミリ秒単位で設定し、ネットワーク接続を確立できます。FTP/FTPS で個別の soTimeout を設定することもできます。これは ftpClient.soTimeout の使用に対応します。SFTP は connectTimeoutsoTimeout として自動的に使用することに注意してください。timeout オプションは、ftpClient.dataTimeout 値に対応するデータタイムアウトとして FTP/FTSP にのみ適用されます。すべてのタイムアウト値はミリ秒単位です。

ローカルワークディレクトリーの使用

Apache Camel は、リモートの FTP サーバーからの消費と、ローカルの作業ディレクトリーへのファイルのダウンロードをサポートします。これにより、FileOutputStream を使用してローカルファイルに直接ストリーミングされるため、リモートファイルの内容全体がメモリーに読み取られなくなります。
Apache Camel は、ファイルのダウンロード中に .inprogress を拡張子とし、リモートファイルと同じ名前のローカルファイルに保存します。その後、ファイルの名前が変更され、.inprogress 接尾辞が削除されます。最後に、エクスチェンジ が完了すると、ローカルファイルが削除されます。
そのため、リモートの FTP サーバーからファイルをダウンロードしてファイルとして保存する場合は、以下のようなファイルエンドポイントにルーティングする必要があります。
from("ftp://someone@someserver.com?password=secret&localWorkDirectory=/tmp").to("file://inbox");
Copy to Clipboard Toggle word wrap
ワークファイルの名前変更による最適化
上記のルートは、ファイルの内容全体をメモリーに読み込まないようにするため、効率的です。リモートファイルをローカルファイルストリームに直接ダウンロードします。その後、java.io.File ハンドルが エクスチェンジ ボディーとして使用されます。ファイルプロデューサーはこのファクトを活用し、ワークファイル java.io.File ハンドルで直接動作し、java.io.File.rename をターゲットファイル名に対して実行できます。Apache Camel はローカルのワークファイルを認識しているため、作業ファイルはいつでも削除されることが意図されているため、ファイルコピーの代わりに名前変更を最適化および使用できます。

ディレクトリーのステップ的な変更

Camel FTP は、ファイルの使用時(ダウンロードなど)やファイルの生成(アップロードなど)に関する 2 つのモードで動作できます。
  • stepwise
  • 非ステップ(stepwise)
状況やセキュリティーの問題に応じて、どちらかを選択できます。一部の Camel エンドユーザーは、ステップベースを使用している場合のみファイルをダウンロードできますが、ダウンロードできない場合に限りダウンロードが可能です。少なくとも、選択する選択肢があります。
ディレクトリーのステップ的な変更は、多くの場合、ユーザーがそのホームディレクトリーに制限され、ホームディレクトリーが / として報告される場合にのみ機能します。
これら 2 つの違いは、例で説明するのが最適です。リモート FTP サーバーで以下のディレクトリー構造がある場合は、ファイルをトラバースしてダウンロードする必要があります。
      /
      /one
      /one/two
      /one/two/sub-a
      /one/two/sub-b
Copy to Clipboard Toggle word wrap
また、sub-a (a.txt)と sub-b (b.txt)の各フォルダーにファイルがあります。

stepwise=true (デフォルトモード)の使用

以下のログは、FTP エンドポイントが ステップ単位 のモードで動作している場合の FTP エンドポイントとリモート FTP サーバー間の対話を示しています。
      TYPE A
      200 Type set to A
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      SYST
      215 UNIX emulated by FileZilla
      PORT 127,0,0,1,17,94
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CWD sub-a
      250 CWD successful. "/one/two/sub-a" is current directory.
      PORT 127,0,0,1,17,95
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CDUP
      200 CDUP successful. "/one/two" is current directory.
      CWD sub-b
      250 CWD successful. "/one/two/sub-b" is current directory.
      PORT 127,0,0,1,17,96
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CDUP
      200 CDUP successful. "/one/two" is current directory.
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      PORT 127,0,0,1,17,97
      200 Port command successful
      RETR foo.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      CWD sub-a
      250 CWD successful. "/one/two/sub-a" is current directory.
      PORT 127,0,0,1,17,98
      200 Port command successful
      RETR a.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      CWD sub-b
      250 CWD successful. "/one/two/sub-b" is current directory.
      PORT 127,0,0,1,17,99
      200 Port command successful
      RETR b.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      QUIT
      221 Goodbye
      disconnected.                                                 

Copy to Clipboard Toggle word wrap
ステップが有効にされると、CD xxx を使用してディレクトリー構造を通過します。

stepwise=false の使用

以下のログは、FTP エンドポイントが ステップ以外のモードで動作している場合の FTP エンドポイントとリモート FTP サーバー間の対話を示して います。
      230 Logged on
      TYPE A
      200 Type set to A
      SYST
      215 UNIX emulated by FileZilla
      PORT 127,0,0,1,4,122
      200 Port command successful
      LIST one/two
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,123
      200 Port command successful
      LIST one/two/sub-a
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,124
      200 Port command successful
      LIST one/two/sub-b
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,125
      200 Port command successful
      RETR one/two/foo.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      PORT 127,0,0,1,4,126
      200 Port command successful
      RETR one/two/sub-a/a.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      PORT 127,0,0,1,4,127
      200 Port command successful
      RETR one/two/sub-b/b.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      QUIT
      221 Goodbye
      disconnected.                              

Copy to Clipboard Toggle word wrap
ステップ以外の場合に分かるように、CD 操作は呼び出されません。

サンプル

以下の例では、Apache Camel を設定して、FTP サーバーからすべてのレポートを 1 時間(60 分)に BINARY コンテンツとしてダウンロードし、ローカルファイルシステムにファイルとして保存するように設定します。
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() throws Exception {
            // we use a delay of 60 minutes (eg. once pr. hour we poll the FTP server
            long delay = 60 * 60 * 1000L;

            // from the given FTP server we poll (= download) all the files
            // from the public/reports folder as BINARY types and store this as files
            // in a local directory. Apache Camel will use the filenames from the FTPServer

            // notice that the FTPConsumer properties must be prefixed with "consumer." in the URL
            // the delay parameter is from the FileConsumer component so we should use consumer.delay as
            // the URI parameter name. The FTP Component is an extension of the File Component.
            from("ftp://tiger:scott@localhost/public/reports?binary=true&consumer.delay=" + delay).
                to("file://target/test-reports");
        }
    };
}
Copy to Clipboard Toggle word wrap
Spring DSL を使用したルート:
  <route>
     <from uri="ftp://scott@localhost/public/reports?password=tiger&inary=true&elay=60000"/>
     <to uri="file://target/test-reports"/>
  </route>
Copy to Clipboard Toggle word wrap

ルートによってトリガーされるリモート FTP サーバーの使用

FTP コンシューマーは、from ルートで使用されるスケジュールされたコンシューマーとして構築されます。ただし、ルート内でトリガーされた FTP サーバーから消費を開始する場合は、以下のようなルートを使用します。
from("seda:start")
   // define the file name so that only a single file is polled and deleted once retrieved
   .pollEnrich("ftp://admin@localhost:21/getme?password=admin&binary=false&fileName=myFile.txt&delete=true")
   .to("mock:result");
Copy to Clipboard Toggle word wrap

リモート FTPS サーバー(暗黙的な SSL)およびクライアント認証の使用

from("ftps://admin@localhost:2222/public/camel?password=admin&securityProtocol=SSL&isImplicit=true
      &ftpClient.keyStore.file=./src/test/resources/server.jks
      &ftpClient.keyStore.password=password&ftpClient.keyStore.keyPassword=password")
  .to("bean:foo");

Copy to Clipboard Toggle word wrap

リモート FTPS サーバー(explicit TLS)およびカスタムトラストストア設定の使用

from("ftps://admin@localhost:2222/public/camel?password=admin&ftpClient.trustStore.file=./src/test/resources/server.jks&ftpClient.trustStore.password=password")
  .to("bean:foo");
Copy to Clipboard Toggle word wrap

org.apache.camel.component.file.GenericFileFilter を使用するフィルター

Apache Camel はプラグ可能なフィルターリングストラテジーをサポートします。Java で org.apache.camel.component.file.GenericFileFilter インターフェイスを実装してフィルターストラテジーを定義します。次に、フィルターでエンドポイントを設定し、特定のファイルをスキップできます。
以下の例では、report で始まるファイル名のファイルのみを許可するフィルターを定義します。
public class MyFileFilter<T> implements GenericFileFilter<T> {

    public boolean accept(GenericFile<T> file) {
        // we only want report files 
        return file.getFileName().startsWith("report");
    }
}
Copy to Clipboard Toggle word wrap
次に、filter 属性を使用して、Spring XML ファイルで定義したフィルター( # 表記を使用)を参照するルートを設定できます。
   <!-- define our sorter as a plain spring bean -->
   <bean id="myFilter" class="com.mycompany.MyFileFilter"/>

  <route>
    <from uri="ftp://someuser@someftpserver.com?password=secret&filter=#myFilter"/>
    <to uri="bean:processInbox"/>
  </route>
Copy to Clipboard Toggle word wrap

ANT パスマッチャーを使用したフィルターリング

ANT パスマッチャーは、camel-spring jar で追加設定なしで同梱されるフィルターです。そのため、Maven を使用している場合は camel-spring に依存する必要があります。理由は、Spring の AntPathMatcher を使用して実際のマッチングを行うためです。
ファイルパスは、以下のルールと一致します。
  • ? 1 文字に一致します。
  • * ゼロ以上の文字に一致します。
  • ** パス内の 0 個以上のディレクトリーに一致します。
以下の例は、その使用方法を示しています。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">

    <template id="camelTemplate"/>

    <!-- use myFilter as filter to allow setting ANT paths for which files to scan for -->
    <endpoint id="myFTPEndpoint" uri="ftp://admin@localhost:${SpringFileAntPathMatcherRemoteFileFilterTest.ftpPort}/antpath?password=admin&ecursive=true&elay=10000&nitialDelay=2000&ilter=#myAntFilter"/>

    <route>
        <from ref="myFTPEndpoint"/>
        <to uri="mock:result"/>
    </route>
</camelContext>

<!-- we use the AntPathMatcherRemoteFileFilter to use ant paths for includes and exclude -->
<bean id="myAntFilter" class="org.apache.camel.component.file.AntPathMatcherGenericFileFilter">
    <!-- include any files in the sub-folder that have day in the name -->
    <property name="includes" value="**/subfolder/**/*day*"/>
    <!-- exclude all files with bad in name or .xml files. Use comma to seperate multiple excludes -->
    <property name="excludes" value="**/*bad*,**/*.xml"/>
</bean>
Copy to Clipboard Toggle word wrap

SFTP でのプロキシーの使用

HTTP プロキシーを使用してリモートホストに接続するには、以下のようにルートを設定できます。
<!-- define our sorter as a plain spring bean -->
<bean id="proxy" class="com.jcraft.jsch.ProxyHTTP">
  <constructor-arg value="localhost"/>
  <constructor-arg value="7777"/>
</bean>

<route>
  <from uri="sftp://localhost:9999/root?username=admin&password=admin&proxy=#proxy"/>
  <to uri="bean:processFile"/>
</route>
Copy to Clipboard Toggle word wrap
必要に応じて、ユーザー名とパスワードをプロキシーに割り当てることもできます。すべてのオプションを検出するには、com.jcraft.jsch.Proxy のドキュメントを参照してください。

推奨される SFTP 認証方法の設定

sftp コンポーネントが使用する認証方法の一覧を明示的に指定する場合は、preferredAuthentications オプションを使用します。たとえば、Camel が秘密鍵/パブリック SSH 鍵で認証を試み、公開鍵が利用できない場合にユーザー/パスワード認証にフォールバックします。以下のルート設定を使用します。
from("sftp://localhost:9999/root?username=admin&password=admin&preferredAuthentications=publickey,password")
  .to("bean:processFile");
Copy to Clipboard Toggle word wrap

固定名を使用した単一ファイルの使用

1 つのファイルをダウンロードし、ファイル名を知っている場合は、fileName=myFileName.txt を使用して、ダウンロードするファイルの名前を Camel に指示できます。デフォルトでは、コンシューマーは FTP LIST コマンドを実行してディレクトリーの一覧を実行し、fileName オプションに基づいてこれらのファイルをフィルターリングします。このユースケースでは、useList=false を設定してディレクトリー一覧をオフにすることが推奨されます。たとえば、FTP サーバーへのログインに使用されるユーザーアカウントには、FTP LIST コマンドを実行する権限がない場合があります。そのため、useList=false を使用してこれをオフにしてから、fileName=myFileName.txt でダウンロードするファイルの固定名を指定します。その後、FTP コンシューマーはファイルをダウンロードできます。何らかの理由で ファイルが存在しない場合は、Camel はデフォルトで例外を出力し、ignoreFileNotFoundOrPermissionError=true を設定してこれを無視します。
たとえば、単一ファイルを選択し、使用後に削除する Camel ルートを設定するには、次のようにします。
from("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true")
  .to("activemq:queue:report");
Copy to Clipboard Toggle word wrap
上記で説明したすべてのオプションを使用していることに注意してください。
ConsumerTemplate で使用することもできます。たとえば、単一のファイル(存在する場合)をダウンロードし、ファイルの内容を String タイプとして取得するには、以下を実行します。
String data = template.retrieveBodyNoWait("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true", String.class);
Copy to Clipboard Toggle word wrap

デバッグロギング

このコンポーネントにはログレベル TRACE があり、問題がある場合に役立ちます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat