我需要从Rest服务获取一个图像文件,并将其作为HTML表单的一部分通过邮件发送。该服务将图像文件作为编码String返回,我需要解码此String并获取字节数组。以下是我正在使用的代码的一些片段。
//response is a json object coming from service
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(new StringReader(
response));
String jsonObjectImage = (String) jsonObject.get("image");
String decodedStr = Base64.decodeBase64(jsonObjectImage.getBytes("UTF-8"));
// here is the snippet from "mail sending" part
MimeMultipart multipart = new MimeMultipart("related")
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<img src=\"cid:image\">";
messageBodyPart.setContent(htmlText, "text/html");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(decodedStr.getBytes(Charset.forName("UTF-8")),"application/octet-stream");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","<image>");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
问题是收到电子邮件时,而不是显示图像的图像可能会显示。我怀疑问题是我解码和获取字节数组的地方,所以为了测试目的,我试图从字节数组中获取图像文件并写入硬盘。但是当我打开图像文件时,它再次说“我们无法显示图像”。我有点困惑是问题是在我身边还是在我正在调用的服务中 - 即他们可能没有正确编码字符串。任何想法/帮助都表示赞赏。
仅供参考,我对外部服务无法控制
编辑:由于项目的协议,我使用的是Java 6