如何从JSON对象获取已编码为base64字符串的图像?

时间:2018-06-06 20:27:48

标签: java json base64 javamail

我需要从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

0 个答案:

没有答案