【问题标题】:How to return image in Spring REST to browser如何将 Spring REST 中的图像返回到浏览器
【发布时间】:2016-02-03 01:53:27
【问题描述】:

我需要在我的 Spring 控制器中返回图像。 我尝试在这个Spring MVC: How to return image in @ResponseBody? 中回答,但它不起作用

我的代码是这样的

@RequestMapping(value = "cabang/photo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<byte[]> getPhoto() throws IOException {

     File imgPath = new File("D:\\test.jpg");

    byte[] image = Files.readAllBytes(imgPath.toPath());
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_JPEG);
    headers.setContentLength(image.length);
    return new ResponseEntity<>(image, headers, HttpStatus.OK);
}

但是当我在浏览器中访问它时,它什么也不显示(只是没有图片图标)。但是如果我读取图像字节数组,它不是空的。 我错过了代码中的任何内容吗?

【问题讨论】:

  • 打开浏览器的网络控制台并检查响应包含的内容。在此处发布。
  • 哦,看起来类型仍然是“文档”。但我将它设置在标题中,所以它应该返回图像。也许我设置错了?
  • 您当前拥有的应该正确设置内容类型标头。检查您的处理程序方法是否被正确调用。请注意,@ResponseBody 是不必要的,因为您的返回类型是 ResponseEntity。删除它。
  • hmm.. 在响应头中,内容类型已经是 image/jpeg,作为响应,它不是空的.. 像“/9j/4AAQSkZJRgABAQE...”,但我不知道为什么浏览器不显示它。我可以检查字节数组,所以我认为该方法被调用了
  • 这个问题你解决了吗?

标签: spring image rest controller spring-rest


【解决方案1】:

您的代码看起来不错。确保将 ByteArrayHttpMessageConverter 添加到应用程序的 http 消息转换器列表中。

Java 配置:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    ByteArrayHttpMessageConverter byteConverter = new ByteArrayHttpMessageConverter();
    converters.add(byteConverter);
    super.configureMessageConverters(converters);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2011-03-13
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多