控制用于 MimeMessage 附件的 DataContentHandler?
Control what DataContentHandler to use for a MimeMessage attachment?
我正在为带有字节数组的 Tiff 图像创建 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.mail.internet.MimeMessage
上设置 javax.activation.DataHandler
,在 DataHandler
中可以设置 javax.activation.DataContentHandlerFactory
,但我不确定是什么将其设置为。
有没有办法强制将字节数组转换为 base64 编码的字符串,而不管 mime 类型如何?
javax.mail
为您可以显式使用的字节提供 DataSource
实现。
ByteArrayDataSource dataSource = new ByteArrayDataSource(tiffByteArray, "image/tiff");
DataHandler byteDataHandler = new DataHandler(dataSource);
body.setDataHandler(byteDataHandler);
body.setDisposition("attachment");
body.setFileName(filename);
我正在为带有字节数组的 Tiff 图像创建 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.mail.internet.MimeMessage
上设置 javax.activation.DataHandler
,在 DataHandler
中可以设置 javax.activation.DataContentHandlerFactory
,但我不确定是什么将其设置为。
有没有办法强制将字节数组转换为 base64 编码的字符串,而不管 mime 类型如何?
javax.mail
为您可以显式使用的字节提供 DataSource
实现。
ByteArrayDataSource dataSource = new ByteArrayDataSource(tiffByteArray, "image/tiff");
DataHandler byteDataHandler = new DataHandler(dataSource);
body.setDataHandler(byteDataHandler);
body.setDisposition("attachment");
body.setFileName(filename);