我正在为MimeMessage
创建一个带有字节数组的Tiff图像的附件。
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)。我收到以下错误:
无法将图像编码为流ImageDataContentHandler需要Image对象,给出类型为[B
的对象
我可以看到您可以在javax.activation.DataHandler
上设置javax.mail.internet.MimeMessage
,在DataHandler
设置javax.activation.DataContentHandlerFactory
,但我不确定是什么将其设置为。
有没有办法强制将字节数组转换为base64编码的字符串,而不管mime类型如何?
答案 0 :(得分:1)
javax.mail
为您可以明确使用的字节提供DataSource
实现。
ByteArrayDataSource dataSource = new ByteArrayDataSource(tiffByteArray, "image/tiff");
DataHandler byteDataHandler = new DataHandler(dataSource);
body.setDataHandler(byteDataHandler);
body.setDisposition("attachment");
body.setFileName(filename);