Multiple Attachments in MuleSoft
In this post, a Mule-based developer shows us how we can handle attachments in MuleSoft, using the example of sending attachments to REST/SOAP API.
This article is all about how we can handle multiple attachments in MuleSoft.
Let's say we have a requirement to send attachments to a REST/SOAP API.
In order to achieve this one can follow the below steps:
1. Declare a variable which can store a list.
<set-variable variableName="attachments" value="#[new.java.util.ArrayList()]" doc:name="attachments">
2. Use a foreach scope in order to handle multiple attachments and read attachments using the transform-message component. Add each attachment to the array list.
<foreach collection="#[message.inboundAttachments]" doc:name="For Each">
<dw:transform-message doc:name="Read Attachment">
<dw:set-payload><![CDATA[
%dw 1.0
%output application/java
---
{
"fileName": payload.dataSource.part.fileName,
"filedata": payload.inputStream,
"fileSize": payload.dataSource.part.size
}
]]></dw:set-payload>
</dw:transform-message>
<expression-transformer expression="#[flowVars.attachments.add(payload)]" doc:name="Add attachment to List">
</foreach>
If you want to send an encoded string instead of a byte array, you can define a global function and use it as below:
<configuration doc:name="Configuration">
<expression-language>
<global-functions>
def byteToEncodedString(bytes) {
import org.apche.commons.codec.binary.Base64;
import java.lang.String;
byte[] encoded = Base64.encodeBase64(bytes);
String encoString = new String(encoded);
return encodedString;
}
</global-functions>
</expression-language>
</configuration>
Use the above global function in DataWeave:
%dw 1.0
%output application/java
---
{
"fileName": payload.dataSource.part.fileName,
"filedata": byteToEncodedString(payload.inputStream),
"fileSize": payload.dataSource.part.size
}
Set payload with value = flowVars.attachments.
Now if you have any specific request format for an API, you can easily transform the current payload in the required format using a Transform Message component.
Opinions expressed by DZone contributors are their own.