Base64 のデコードとエンコード

次の 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"​ を使用することもこの例では有効です。

DataWeave スクリプト:
%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"​ を使用することもこの例では有効です。

DataWeave スクリプト:
%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 からのその出力をデコードします。

  1. Anypoint Studio で Mule プロジェクトを作成します。

    1. [File (ファイル)] > [New (新規)] > [Mule Project (Mule プロジェクト)]​ を選択します。

    2. Mule プロジェクトの名前を入力します。

    3. [Finish (完了)]​ をクリックします。

  2. [Mule Palette (Mule パレット)] の ​[Add Module (モジュールを追加)]​ を使用して、File Connector を追加します。

    1. [Mule Palette (Mule パレット)]​ ビューで、​[(X) Search in Exchange ((X) Exchange 内を検索)]​ をクリックします。

    2. [Add Dependencies to Project (連動関係をプロジェクトに追加)]​ ウィンドウで、検索項目に「​file​」と入力します。

    3. [Available modules (使用可能なモジュール)] で ​[File Connector]​ をクリックします。

    4. [Add (追加)]​ をクリックします。

    5. [Finish (完了)]​ をクリックします。

  3. Studio キャンバスで ​[Configuration XML (設定 XML)]​ タブに移動します。

  4. 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​ に置き換えることができます。

  5. 選択した PDF ファイルをマシンのローカルディレクトリに配置します。

  6. Read​ および ​Write​ 操作の入力ディレクトリと出力ディレクトリを修正します。

    • Read​ 操作で、​[File Path (ファイルパス)]​ の値 `/Users/me/Downloads" を PDF ファイルの場所に変更します。

    • Write​ 操作で、​[Path (パス)]​ の値 ​/Users/me/pdf-test.pdf"​ をファイルを出力する場所とファイル名に変更します。

  7. Studio でプロジェクトを実行します。

  8. 0.0.0.0:8081/transform​ をブラウザーに読み込みます。

    このアクションにより、指定した場所に PDF ファイルが作成され、Set Payload コンポーネントのメッセージ ​PDF file created in the directory specified in the Write operation.​ を含む別の ​transform​ ファイルが生成されます。