如何将图像返回给客户端?

时间:2019-05-23 16:35:02

标签: java spring

我需要一个正在做9gag之类的项目的帮助,我试图返回一个包含一些数据和图像的JSON对象。

我尝试了几种方法,以字节数组返回图像并设置GetMapping注释以产生=“ image / jpeg”。另外,我尝试使用Base64进行此操作,但是由于我是使用Base64的新手,因此我不确定完全可以正确使用它。

@GetMapping(value = "/")
    public List<PostDTO> browseAll() throws IOException {
        List<Media> dbMedia = mediaRepo.findAll();
        List<PostDTO> postDTOS = new ArrayList<>();
        for (Media media : dbMedia){
            postDTOS.add(media.convertToPostDTO());
        }
        for (PostDTO post : postDTOS){
            post.setFile(returnImage());
        }
        return postDTOS;
    }
    private String returnImage() throws IOException {
        List<Media> media = mediaRepo.findAll();
        for (Media file : media){
            File newImage = new File(file.getDir());
            FileInputStream fis = new FileInputStream(newImage);
            String encoded = Base64.getEncoder().encodeToString(fis.readAllBytes());
            String imgData = "data:image/jpeg;base64," + Base64Utils.decodeFromString(encoded);

            return imgData;

        }
        return "failed";
    }

通过使用Produce =“ image / jpec”来实现,我得到了-“已解决[org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示形式]”另外,我还在使用Postman进行测试。 同样在这里,一个Json对象是什么样子,在“文件”处,我需要实际的图像。

    {
        "author": "Uponn",
        "title": null,
        "likes": 0,
        "file": "data:image/jpeg;base64,[B@3acfd4dd",
        "uploadTime": null
    },

1 个答案:

答案 0 :(得分:0)

根据以上讨论,如果我的理解是正确的,则需要将图像发送给前端工程师,以便他们能够在网页中显示。我在下面的代码段中提供了,您可以尝试。

@GetMapping(value = "/showImage", produces = "image/jpg")
  public ResponseEntity<byte[]> getImageAsResponseEntity(
      @RequestParam("fileName") String fileName) {
    String dirPath = "some path in your drive/";
    HttpHeaders headers = new HttpHeaders();
    InputStream in = null;
    byte[] media = new byte[0];
    try {
      in = new FileInputStream(dirPath + fileName);
      media = IOUtils.toByteArray(in);
    } catch (IOException e) {
      e.printStackTrace();
    }
    ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(media, headers, HttpStatus.OK);
    return responseEntity;
  }