I have a base64 encoded string which is posted using JSON into a Spring form.
data:image/png;base64,iVBORw0KGg......etc
I want to add this image as an attachment to an email. Attaching the file works fine, but it is just adding the base64 string as the attachment.
I am using the following code to create the attachment part.
private MimeBodyPart addAttachment(final String fileName, final String fileContent) throws MessagingException {
if (fileName == null || fileContent == null) {
return null;
}
LOG.debug("addAttachment()");
MimeBodyPart filePart = new MimeBodyPart();
String data = fileContent;
DataSource ds;
ds = new ByteArrayDataSource(data.getBytes(), "image/*");
// "image/*"
filePart.setDataHandler(new DataHandler(ds));
filePart.setFileName(fileName);
LOG.debug("addAttachment success !");
return filePart;
}
I also tried
ds = new ByteArrayDataSource(data, "image/*");
How can I convert the base64 string into a proper image file using the ByteArrayDataSource ?
You'll hav to use a Base64-decoder first. With Java 8 you could do:
byte[] imgBytes = Base64.getDecoder().decode(base64String);
With older java-versions you'll have to use some library like apache commons-codec or something - there's lots of those around.