Search code examples
javajakarta-mail

java mail Base64 encoded string to image attachment


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 ?


Solution

  • 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.