2016-07-25 7 views
1

Я создаю приложение для 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?

+0

Я думаю, что я мог бы найти ответ 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

ответ

0

javax.mail обеспечивает реализацию DataSource для байтов, которую вы можете явно использовать.

ByteArrayDataSource dataSource = new ByteArrayDataSource(tiffByteArray, "image/tiff"); 
DataHandler byteDataHandler = new DataHandler(dataSource); 
body.setDataHandler(byteDataHandler); 
body.setDisposition("attachment"); 
body.setFileName(filename); 

 Смежные вопросы

  • Нет связанных вопросов^_^