我正在尝试使用 BodyPart 检索 MIME 多部分的内容,如下所示
ByteArrayOutputStream baos = null;
MimeMultipart mp = new MimeMultipart(new ByteArrayDataSource(inputStream, contentType));
int count = mp.getCount();
baos = new ByteArrayOutputStream();
for (int i = 0; i < count; i++) {
BodyPart bodyPart = mp.getBodyPart(i);
Object content = bodyPart.getContent();
if (content instanceof InputStream) {
// process inputStream
}
bodyPart.writeTo(MIMEbaos);
String attachment = MIMEbaos.toString();
}
但是,当 attachment
包含时,当我只期望内容(没有内容类型、边界等)时,bodyPart.getContent()
提供与整个 MIME 消息相同的输入流整个 MIME 多部分正文部分,包括内容类型等。
InputStream
来自
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
byte[] bytes = baos.toByteArray();
InputStream inputStream = new ByteArrayInputStream(bytes);
其中msg
是SOAPMessage
MIME类型作为MTOM
最佳答案
我最终得到了
ByteArrayOutputStream baos = null;
MimeMultipart mp = new MimeMultipart(new ByteArrayDataSource(inputStream, contentType));
int count = mp.getCount();
baos = new ByteArrayOutputStream();
for (int i = 0; i < count; i++) {
BodyPart bodyPart = mp.getBodyPart(i);
Object content = bodyPart.getContent();
String content = new String(read(bodyPart));
String partContentType = bodyPart.getContentType();
}
bodyPart.writeTo(MIMEbaos);
String attachment = MIMEbaos.toString();
private static byte[] read(BodyPart bodyPart) throws MessagingException, IOException
{
InputStream inputStream = bodyPart.getInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int data = 0;
byte[] buffer = new byte[1024];
while ((data = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, data);
}
return outputStream.toByteArray();
}
关于Java:获取MIME多部分BodyPart的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787081/