SFTP Connector を使用したファイルのリスト - Mule 4

SFTP 用 Anypoint Connector (SFTP Connector) の ​List​ 操作では、ディレクトリパス内のファイルまたはフォルダーを表すメッセージのリストを返します。

  • [Directory path (ディレクトリパス)]​ 項目で定義するパスには絶対パスを指定できます。また、作業ディレクトリを基準とする相対パスを指定することもできます。

  • デフォルトでは、この操作はディレクトリパスのサブフォルダー内のファイルまたはフォルダーを読み取ったり、それらのリストを作成したりしません。

  • サブフォルダー内のファイルまたはフォルダーのリストを作成するには、​[Recursive (再帰)]​ 項目を ​TRUE​ に設定します。

Studio で List 操作を設定する

Studio で ​List​ 操作を追加および設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで「​sftp​」を検索し、​[List]​ 操作を選択します。

  2. [List]​ 操作を Studio キャンバスにドラッグします。

  3. 操作の設定画面の ​[General (一般)]​ タブで、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックし、グローバル要素設定項目にアクセスします。

  4. 接続情報を指定し、​[OK]​ をクリックします。

  5. [General (一般)]​ タブで、​[Directory path (ディレクトリパス)]​ 項目を ​~/dropFolder​ に設定し、リストを作成するファイルのパスを設定します。

Studio の List 操作の設定

設定 XML​ エディターでは、​<sftp:list>​ 設定は次のように記述されます。

<sftp:list doc:name="List" config-ref="SFTP_Config" directoryPath="~/dropFolder"/>

基本的なユースケース

次の XML の例では、ディレクトリパスのメッセージのフォルダーのコンテンツ (サブフォルダーのコンテンツは除外) のリストを作成します。​[For Each]​ コンポーネントおよび ​[Choice (選択)]​ コンポーネントは、リストの各ディレクトリを各ファイルとは異なる方法で管理します。

<flow name="list">
  <sftp:list config-ref="SFTP_Config" directoryPath="~/dropFolder" />
  <foreach>
    <choice>
      <when expression="#[attributes.directory]">
        <flow-ref name="processDirectory" />
      </when>
      <otherwise>
        <logger message="Found file #[attributes.path]" />
		<sftp:read config-ref="SFTP_Config" path="#[payload]" />
		<logger message="Whose content is #[payload]" />
      </otherwise>
    </choice>
  </foreach>
</flow>

ディレクトリのポーリング

Scheduler​ ソースを SFTP の ​List​ 操作と連携させて、ディレクトリをポーリングし、処理する新しいファイルを検索できます。

自動ポーリングの場合、SFTP の ​On New or Updated File​ 操作を使用します。これにより、必要に応じて、後処理オプションを設定して自動的にファイルを移動または削除できます。

次のディレクトリのポーリングの例では、フローによって 1 秒に 1 回フォルダーのコンテンツがリストされます。フローは続いてファイルを 1 つずつ処理します。​[For Each]​ コンポーネントに ​Delete​ 操作があるため、処理が終わると各ファイルを削除します。

次のスクリーンショットは、Studio のフローを示しています。

Studio のディレクトリのポーリングのフロー

フローを作成する手順は、次のとおりです。

  1. Studio で、​[Scheduler]​ コンポーネントを Studio キャンバスにドラッグします。

  2. SFTP の ​[List]​ 操作を ​[Scheduler]​ の右にドラッグします。

  3. 操作の設定画面の ​[General (一般)]​ タブで、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックし、グローバル要素設定項目にアクセスします。

  4. 接続情報を指定し、​[OK]​ をクリックします。

  5. [General (一般)]​ タブで、​[Directory path (ディレクトリパス)]​ 項目を ​/config/dropFolder​ に設定し、リストを作成するファイルのパスを設定します。

  6. [For each]​ コンポーネントを ​[List]​ 操作の右にドラッグします。

  7. [Flow Reference]​ コンポーネントを ​[For each]​ 内にドラッグします。

  8. [Flow name (フロー名)]​ 項目を ​processFile​ に設定し、ファイルを処理するフロー参照を指定します。

  9. SFTP の ​[Delete]​ 操作を ​[Flow Reference]​ コンポーネントの右にドラッグします。

  10. [Connector configuration (コネクタ設定)]​ 項目を、​[List]​ 操作で以前に設定した接続に設定します。

  11. [Path (パス)]​ 項目を ​#[payload]​ に設定します。

  12. [Transform Message (メッセージの変換)]​ コンポーネントを最初のフローの下にドラッグします。

  13. 新しいフローを選択し、​[Name (名前)]​ 項目を ​processFile​ に変更します。

  14. SFTP の ​Read​ 操作を ​Transform Message​ コンポーネントの左にドラッグして、​[Path (パス)]​ 項目を ​#[payload]​ に設定します。

  15. 新しいフローで ​[Transform Message (メッセージの変換)]​ コンポーネントを選択し、​[Output (出力)]​ ビューで、次の DataWeave 式を貼り付けます。

    %dw 2.0
    						output application/json
    						---
    						characters: payload.characters.*name map (
    						            (item, index) -> {name: item}
    						         )
  16. [Logger]​ コンポーネントを ​[Transform Message (メッセージの変換)]​ の右にドラッグします。

  17. [Message (メッセージ)]​ 項目を ​payload​ に設定します。

  18. Objet Store の ​[Store]​ 操作を ​[Logger]​ の右にドラッグします。

  19. [Key (キー)]​ 項目を ​test-file-' random() as String '.json'​ に、​[Value (値)]​ 項目を ​payload​ に設定します。

  20. Mule アプリケーションを保存します。

設定 XML​ エディターでは、設定は次のように記述されます。

?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:os="http://www.mulesoft.org/schema/mule/os"
    xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:ftps="http://www.mulesoft.org/schema/mule/ftps"
	xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd
http://www.mulesoft.org/schema/mule/ftps http://www.mulesoft.org/schema/mule/ftps/current/mule-ftps.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/os http://www.mulesoft.org/schema/mule/os/current/mule-os.xsd">

	<sftp:config name="SFTP_Config" doc:name="SFTP Config" >
		<sftp:connection host="localhost" port="2222" username="bob" password="pass"/>
	</sftp:config>

	<os:object-store name="Object_store" doc:name="Object store" />

	<flow name="poll">
	  <scheduler>
	      <scheduling-strategy>
	          <fixed-frequency frequency="1000"/>
	      </scheduling-strategy>
	  </scheduler>

	  <sftp:list directoryPath="/config/dropFolder" config-ref="SFTP_Config"/>

	  <foreach>
	      <flow-ref name="processFile" />
	      <sftp:delete path="#[payload]" config-ref="SFTP_Config"/>
	  </foreach>
	</flow>

	  <flow name="processFile" maxConcurrency="1">
	  		<sftp:read config-ref="SFTP_Config" path="#[payload]" />
			<ee:transform doc:name="Transform Message" >
				<ee:message >
					<ee:set-payload ><![CDATA[%dw 2.0
						output application/json
						---
						characters: payload.characters.*name map (
						            (item, index) -> {name: item}
						         )]]></ee:set-payload>
				</ee:message>
			</ee:transform>

			<logger level="ERROR" message="#[payload]" />
			<os:store doc:name="Store" objectStore="Object_store" key="#['test-file-' ++ random() as String ++ '.json']"/>
	  </flow>

</mule>

検索条件の一致

ファイルをリストする場合、指定した条件に一致するファイルを受け入れる ​[File Matching Rules (ファイル一致ルール)]​ 項目を使用します。この項目により、ファイルを受け入れるか拒否する属性を定義します。 これらの属性は省略可能であり、属性の値を提供しない場合は無視されます。​AND​ 演算子を使用して、各属性を結合します。

Studio で項目を設定するには、​[File Matching Rules (ファイル一致ルール)]​ 項目を ​[Edit inline (インラインで編集)]​ に設定し、目的の属性を入力します。

  • Timestamp since (次の日時からのタイムスタンプ)
    この日付より前に作成されたファイルは却下されます。この値でのタイムゾーンの指定は無視され、代わりに Mule サーバーのタイムゾーンが使用されます。

  • Timestamp until (次の日時までのタイムスタンプ)
    この日付より後に作成されたファイルは却下されます。この値でのタイムゾーンの指定は無視され、代わりに Mule サーバーのタイムゾーンが使用されます。

  • Not updated in the last (指定した期間に更新なし)
    ファイルの最後の更新後の経過期間がこの期間以上の場合、却下されません。この属性は、​[Time unit (時間単位)]​ と連携して機能します。

  • Updated in the last (指定した期間に更新あり)
    ファイルの最後の更新後の経過期間がこの期間以内の場合、却下されません。この属性は、​[Time unit (時間単位)]​ と連携して機能します。

  • Time unit (時間単位)
    [Not updated in the last (指定した期間に更新なし)]​ 属性。デフォルトは ​MILLISECONDS​ です。

  • Filename pattern (ファイル名パターン)
    現在のファイル名パターンの絞り込みと似ているが、より強力。グロブ表現 (デフォルト) および正規表現がサポートされています。プレフィックスを設定することでどちらを使用するか選択できます (例: glob:*.{java, js}​ または ​regex:[0-9]test.csv​)。

  • Path pattern (パスパターン)
    Filename pattern (ファイル名パターン)​ と同じだが、ファイル名のみではなくファイルパス全体に適用される。

  • Directories (ディレクトリ)
    ファイルがディレクトリの場合のみ一致する。

  • Regular files (正規ファイル)
    ファイルが正規ファイルの場合のみ一致する。

  • Sym links (シンボリックリンク)​`
    ファイルがシンボリックリンクの場合のみ一致する。

  • Min size (最小サイズ)
    バイト数で表現されるファイルサイズの下限 (境界を含む)。

  • Max size (最大サイズ)
    バイト数で表現されるファイルサイズの上限 (境界を含む)。

「File Matching Rules (ファイル一致ルール)」 項目設定

設定 XML​ エディターでは、設定は次のように記述されます。

<sftp:matcher
  timestampSince="2019-06-03T13:21:58+00:00"
  timestampUntil="2019-06-03T13:21:58+00:00"
  timeUnit="MICROSECONDS"
  filenamePattern="a?*.{htm,html,pdf}"
  pathPattern="a?*.{htm,html,pdf}"
  directories="REQUIRE"
  regularFiles="REQUIRE"
  symLinks="REQUIRE"
  maxSize="1024"/>

外部ファイルシステムマッチャー

SFTP Connector では、外部ファイルシステムマッチャーを使用できます。​[Case sensitive (大文字と小文字を区別)]​ 項目では、マッチャーで大文字と小文字を区別するかどうかを設定できます。

TRUE に設定されている [Case sensitive (大文字と小文字を区別)] 項目

設定 XML​ エディターでは、​caseSensitive​ 設定は次のように記述されます。

<sftp:list doc:name="List" config-ref="SFTP_Config" directoryPath="/upload">
	    <sftp:matcher filenamePattern="*.txt" caseSensitive="true"/>
	</sftp:list>

トップレベルの再利用可能なマッチャー

ファイルマッチャーは名前付きのトップレベル要素として使用して再利用を可能にするか、特定のコンポーネントに固有の内部要素として使用することができます。

次の例は、トップレベルの再利用可能なマッチャーを示しています。

<sftp:matcher name="smallFileMatcher" maxSize="100" />
      <flow name="smallFiles">
      <sftp:list path="~/smallfiles" matcher="smallFileMatcher" />
      ...
</flow>

内部の再利用できないマッチャー

次の例は、内部の再利用できないマッチャーを示しています。

<flow name="smallFiles">
      <sftp:list path="~/smallfiles" matcher="smallFileMatcher">
            <sftp:matcher maxSize="100" />
      </sftp:list>
      ...
</flow>