java mail Base64 encoded string to image attachment

后端 未结 5 2035
旧巷少年郎
旧巷少年郎 2020-12-21 08:38

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

5条回答
  •  时光取名叫无心
    2020-12-21 09:42

    To avoid decoding and re-encoding you can use the javax.mail.internet.PreencodedMimeBodyPart to load your base64 string and attach the PreencodedMimeBodyPart to your message.

        private MimeBodyPart addAttachment(final String fileName, final String fileContent) throws MessagingException {
            if (fileName == null || fileContent == null) {
                return null;
            }
    
            LOG.debug("addAttachment()");
            MimeBodyPart filePart = new PreencodedMimeBodyPart("base64");
            filePart.setContent(fileContent, "image/*");
            LOG.debug("addAttachment success !");
            return filePart;
        }
    

    Otherwise, you can use the javax.mail.internet.MimeUtility::decode to wrap the input stream used with your data source but this will decode and re-encode the given data.

        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;  //Assuming fileContent was encoded as UTF-8.
            InputStream in = new ByteArrayInputStream(data.getBytes("UTF-8"));
            try {
                in = MimeUtility.decode(in, "base64");
                try {
                    ds = new ByteArrayDataSource(in , "image/*");
                } finally {
                    in.close();
                }
            } catch (IOException ioe) {
                throw new MessagingException(fileName, ioe);
            }
    
            // "image/*"
            filePart.setDataHandler(new DataHandler(ds));
            filePart.setFileName(fileName);
    
            LOG.debug("addAttachment success !");
            return filePart;
        }
    

提交回复
热议问题