我正在尝试创建一个返回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标记实现此功能?
答案 0 :(得分:1)
为什么要从服务器返回数据URL?只需返回SVG本身。不需要data:image/svg+xml;base64,
。
out.write(imageString.getBytes());
您还应该确保返回正确的MIME类型。即:
response.addHeader("Content-Type", "image/svg+xml");
这使浏览器知道响应是SVG文件。