我有一个返回BufferedImage
值的网络服务,但我无法在浏览器中显示该图片,因为我知道我已将其从byte[]
转换为BufferedImage
。
我收到的结果如下。
这是我转换byte[]
数据的方式(我可以看到byte[]
中的数据):
ResponseEntity<byte[]> result = new RestTemplate(messageConverters).exchange(new URI(url), HttpMethod.GET, httpEntity, byte[].class );
try {
BufferedImage img = ImageIO.read(new ByteArrayInputStream(result.getBody()));
return img;
} catch (IOException e) {
e.printStackTrace();
}
我得到这样的东西:
{
"accelerationPriority":0.5,
"colorModel":{
"transparency":3,
"numComponents":4,
"numColorComponents":3,
"colorSpace":{
"type":5,
"numComponents":3,
"profile":{
"mediaWhitePoint":[
0.9504547,
1.0,
1.0890503
],
"matrix":[
[
0.43606567,
0.3851471,
0.1430664
],
[
0.2224884,
0.71687317,
0.06060791
],
[
0.013916016,
0.097076416,
0.71409607
]
],
"data":"AAAMSGxjbXMCEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9Q...
答案 0 :(得分:0)
如果我理解正确,那么您在其余模板中已经拥有的第一个byte[]
是源图像的完整内存表示。如果是这种情况,为什么要涉及BufferedImage
?你不能直接从你的控制器返回byte [],并确保在http响应头中设置适当的mime类型。
@GetMapping("/")
public ResponseEntity<byte[]> getImage() {
final ResponseEntity<byte[]> result = new RestTemplate(messageConverters).exchange(new URI(url), HttpMethod.GET, httpEntity, byte[].class );
return ResponseEntity.status(OK)
.contentType(MediaType.IMAGE_JPEG)
.body(result.getBody());
}
另外,如果您只是通过服务将图像代理回客户端,则可能有更好的解决方案 - 例如spring cloud zuul或让客户端直接访问资源。可能有助于根据您的要求了解您所提供的图像。