Я создаю приложение для MimeMessage
для изображения Tiff с байтовым массивом.Контролировать, какой DataContentHandler использовать для приложения MimeMessage?
ByteArrayOutputStream out = new ByteArrayOutputStream();
MimeBodyPart body = new MimeBodyPart();
body.setContent(tiffByteArray, "image/tiff");
body.setDisposition("attachment");
body.setFileName(filename);
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(body);
MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
message.setContent(multipart);
message.writeTo(out);
String mimeContent = out.toString();
Это нормально работает. Изображение преобразуется в строку base64 в сообщении. Однако в какой-то момент происходит что-то в системе, и этот фрагмент кода начинается с использования com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler
. Этот конкретный преобразованный ожидает объект java.awt.Image
, а не массив байтов (relevant source). Я получаю следующее сообщение об ошибке:
Unable to encode the image to a stream ImageDataContentHandler requires Image object, was given object of type class [B
Я могу видеть, что вы можете установить javax.activation.DataHandler
на javax.mail.internet.MimeMessage
и в DataHandler
вы можете установить javax.activation.DataContentHandlerFactory
, но я не уверен, что, чтобы установить его.
Есть ли способ заставить массив байтов преобразовать в кодировку base64, независимо от типа mime?
Я думаю, что я мог бы найти ответ https://books.google.com/books?id=9NaYku1OY4cC&pg=PA140&lpg=PA140&dq=DataContentHandlerFactory&source=bl&ots=wsqCxfRckN&sig=Q25vgayKlJhhNhRPEVYA07vHPBc&hl=en&sa=X&ved=0ahUKEwjOjsiJ447OAhVFw4MKHWpVDWUQ6AEITTAI#v= OnePage & д = DataContentHandlerFactory & F = ложь – JustinKSU