次の DataWeave の例は、ファイルストリームを Base64 に変換する方法、および Base64 文字列をファイルストリームに変換する方法を示しています。入力および出力として PDF ファイルを使用します。
開始する前に、DataWeave バージョン 2 (%dw 2.0) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (%dw 1.0) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。
PDF ファイルの Base64 へのエンコード
この例は、PDF ファイルで Base64 エンコードを実行します。Base64 ファイルストリーム (application/octet-stream) をバイナリに変換し、そのバイナリを text/plain 形式で出力することで、XML 設定の Read 操作で変換をシミュレートします。
この例では、以下の関数を使用します。
-
バイナリ値を Base64 文字列に変換する
dw::core::Binaries モジュールの toBase64。 -
PDF ファイルを入力する
Core (dw::Core) モジュールの readUrl。この例では、PDF ファイルが Anypoint Studio の Mule プロジェクトの
src/main/resources ディレクトリ内にあることを前提としています。PDF ファイルの名前を提供し、"application/octet-stream" として MIME タイプを指定します。2 番目の readUrl 引数として "binary" を使用することもこの例では有効です。
%dw 2.0
import * from dw::core::Binaries
var myPDF = readUrl("classpath://pdf-test.pdf", "application/octet-stream")
output text/plain
---
toBase64(myPDF as Binary)
JVBERi0xLjYNJeLjz9MNCjM3IDAgb2JqIDw8L0xpbmVhcml6ZWQgMS9MIDIwNTk3L08gNDAvRSAx
...
Base64 のデコード
この例では、Base64 ファイルストリーム (application/octet-stream) をバイナリに変換し、そのバイナリを application/PDF with binary 形式で出力することで、XML 設定の Write 操作で変換をシミュレートします。この例は PDF ファイルを生成しません。そのようなファイルの生成には Write 動作が必要です。
この例では、以下の関数を使用します。
-
Base64 文字列をバイナリ値に変換する
dw::core::Binaries モジュールの fromBase64。 -
PDF ファイルを入力する
readUrl。この例では、PDF ファイルが Anypoint Studio の Mule プロジェクトの
src/main/resources ディレクトリ内にあることを前提としています。この関数は、入力 PDF を octet-stream MIME タイプとして読み取ります。2 番目の readUrl 引数として MIME タイプ "binary" を使用することもこの例では有効です。
%dw 2.0
import * from dw::core::Binaries
var myPDF = readUrl("classpath://pdf-test.pdf", "application/octet-stream")
var myPDFasBinary = toBase64(myPDF as Binary)
output application/PDF with binary
---
fromBase64(myPDFasBinary as String) as Binary
この出力は PDF のテキスト表現です。
%PDF-1.6
%����
37 0 obj <</Linearized 1/L 20597/O 40/E 14115/N 1/T 19795/H [ 1005 215]>>
endobj
xref
37 34
0000000016 00000 n
...
XML の設定例
Anypoint Studio では、PDF ファイルをエンコードおよびデコードする Mule フローを作成して実行できます。手順を完了したら、File Connector の Read 操作を使用して、指定されたローカルディレクトリからファイルを読み取ります。File Connector の Write 操作を使用して、PDF を指定されたディレクトリに書き込み、Transform Message コンポーネントを使用してファイルを Base64 にエンコードし、Base64 からのその出力をデコードします。
-
Anypoint Studio で Mule プロジェクトを作成します。
-
[File (ファイル)] > [New (新規)] > [Mule Project (Mule プロジェクト)] を選択します。
-
Mule プロジェクトの名前を入力します。
-
[Finish (完了)] をクリックします。
-
-
[Mule Palette (Mule パレット)] の [Add Module (モジュールを追加)] を使用して、File Connector を追加します。
-
[Mule Palette (Mule パレット)] ビューで、[(X) Search in Exchange ((X) Exchange 内を検索)] をクリックします。
-
[Add Dependencies to Project (連動関係をプロジェクトに追加)] ウィンドウで、検索項目に「
file」と入力します。 -
[Available modules (使用可能なモジュール)] で [File Connector] をクリックします。
-
[Add (追加)] をクリックします。
-
[Finish (完了)] をクリックします。
-
-
Studio キャンバスで [Configuration XML (設定 XML)] タブに移動します。
-
Anypoint Studio の Mule フローの
<mule/> 要素間に、次の例をコピーして貼り付けます。<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" > <http:listener-connection host="0.0.0.0" port="8081" /> </http:listener-config> <file:config name="File_Config" doc:name="File Config" > <file:connection workingDir="/Users/me/Downloads" /> </file:config> <flow name="encode-decode-base64"> <http:listener doc:name="Listener" path="/transform" config-ref="HTTP_Listener_config"/> <file:read doc:name="Read" config-ref="File_Config" path="pdf-test.pdf" /> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 import * from dw::core::Binaries output text/plain --- toBase64(payload as Binary)]]></ee:set-payload> </ee:message> </ee:transform> <ee:transform doc:name="Transform Message" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 import * from dw::core::Binaries output application/pdf with binary --- fromBase64(payload as String) as Binary]]></ee:set-payload> </ee:message> </ee:transform> <file:write doc:name="Write" path="/Users/me/pdf-test-result.pdf"/> <set-payload value='#["PDF file created in the directory specified in the Write operation."]' doc:name="Set Payload" /> </flow>2 番目の Transform Message コンポーネントのディレクティブ
output application/pdf with binary を output application/octet-stream に置き換えることができます。 -
選択した PDF ファイルをマシンのローカルディレクトリに配置します。
-
Read および Write 操作の入力ディレクトリと出力ディレクトリを修正します。
-
Read 操作で、[File Path (ファイルパス)] の値 `/Users/me/Downloads" を PDF ファイルの場所に変更します。
-
Write 操作で、[Path (パス)] の値
/Users/me/pdf-test.pdf" をファイルを出力する場所とファイル名に変更します。
-
-
Studio でプロジェクトを実行します。
-
0.0.0.0:8081/transform をブラウザーに読み込みます。このアクションにより、指定した場所に PDF ファイルが作成され、Set Payload コンポーネントのメッセージ
PDF file created in the directory specified in the Write operation. を含む別の transform ファイルが生成されます。