使用Base64编码URI和JAVA在SVG中创建图像并使用HTML呈现它们

时间:2014-11-24 18:28:59

标签: java html svg base64 uri

我正在尝试创建一个返回SVG的服务。 要求是SVG必须使用img标记(脚本标记是一种奖励)并且还要避免使用JavaScript。

我认为在BASE 64中编码img并将其用作URI是最好的选择。

Java Servlet

        String imageString = g2.getSVGElement();  // creates svg html string e.g <svg> blah blah</svg>
        byte[] imageData = Base64.encodeBase64(imageString.getBytes());

        OutputStream out = response.getOutputStream();
        out.write(imageData);
        out.flush();
        out.close();

来自GET请求的回复

data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5v= ...

HTML

<img src="http://localhost:8080/testapp/getSVG?optionone=1&optiontwo=2">

但是当我加载页面时,我得到了空白的img框。我知道base64 img是正确的,因为我这样做的时候。 。 。

<img src="data:image/svg+xml;base64,PHN22...">

工作正常。如何使用上面的HTML标记实现此功能?

1 个答案:

答案 0 :(得分:1)

为什么要从服务器返回数据URL?只需返回SVG本身。不需要data:image/svg+xml;base64,

out.write(imageString.getBytes());

您还应该确保返回正确的MIME类型。即:

response.addHeader("Content-Type", "image/svg+xml");

这使浏览器知道响应是SVG文件。