%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)
Decode and Encode Base64
The following DataWeave examples show how to convert a file stream into Base64 and to convert a Base64 string into a file stream. They use a PDF file as the input and output. Before you begin, note that 2.x versions of DataWeave are used by Mule 4 apps. For DataWeave in Mule 3 apps, refer to DataWeave version 1.2 examples. For other DataWeave versions, you can use the version selector in the DataWeave table of contents.
Encode a PDF File to Base64
This example performs Base64 encoding on a PDF file. It simulates the transformation in the Read operation from the XML configuration by converting a Base64 file stream (application/octet-stream
) to Binary and outputting the Binary in the text/plain
format.
The example uses the following functions:
-
toBase64
from thedw::core::Binaries
module to transform a binary value to a Base64 string. -
readUrl
from theCore (dw::Core)
module to input a PDF file.The example assumes that the PDF file is in the
src/main/resources
directory of a Mule project in Anypoint Studio. It provides the name of the PDF file and specifies the MIME type as"application/octet-stream"
. Using"binary"
as the secondreadUrl
argument is also valid for this example.
JVBERi0xLjYNJeLjz9MNCjM3IDAgb2JqIDw8L0xpbmVhcml6ZWQgMS9MIDIwNTk3L08gNDAvRSAx
...
Decode Base64
This example simulates the transformation in the Write operation from the XML configuration by converting a Base64 file stream (application/octet-stream
) to Binary and outputting the Binary in the application/PDF with binary
format. The example does not generate a PDF file; a Write operation is required to generate such a file.
The examples use the following functions:
-
fromBase64
in thedw::core::Binaries
module to transform a Base64 string to a binary value. -
readUrl
to input a PDF file.The example assumes that the PDF file is in the
src/main/resources
directory of a Mule project in Anypoint Studio. The function reads the input PDF as an octet-stream MIME type. Using the MIME type"binary"
as the secondreadUrl
argument is also valid for this example.
%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
The output is the text representation of the 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 Configuration Example
In Anypoint Studio, you can create and run a Mule flow that encodes and decodes a PDF file. After you complete the procedure, the example reads the file from the specified local directory using the File Connector Read operation. It writes the PDF to the specified directory by using the File Connector Write operation, and it uses Transform Message components to encode the file to Base64 and to decode that output from Base64.
-
Create a Mule project in Anypoint Studio:
-
Select File > New > Mule Project.
-
Enter a name for your Mule project.
-
Click Finish.
-
-
Use Add Module in the Mule Palette to add the File Connector:
-
In the Mule Palette view, click (X) Search in Exchange.
-
In the Add Dependencies to Project window, type
file
in the search field. -
Click File Connector in Available modules.
-
Click Add.
-
Click Finish.
-
-
In the Studio canvas, navigate to the Configuration XML tab.
-
Copy and paste the following example between the
<mule/>
elements of a Mule flow in Anypoint Studio:<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>
Note that it is valid to replace the directive
output application/pdf with binary
in the second Transform Message component withoutput application/octet-stream
. -
Place a PDF file of your choice into a local directory on your machine.
-
Correct the input and output directories of the Read and Write operations:
-
In the Read operation, change the File Path value `/Users/me/Downloads" to the location of your PDF file.
-
In the Write operation, change the Path value
/Users/me/pdf-test.pdf"
to the location and file name that you want to output the file.
-
-
Run the project in Studio.
-
Load the
0.0.0.0:8081/transform
into a browser.This action creates a PDF file in the specified location and generates a separate
transform
file with the message in the Set Payload component,PDF file created in the directory specified in the Write operation.