java - 如何将图片返回给客户端?

标签 java spring

我需要一些帮助来完成一个项目,我正在做类似 9gag 的事情,我试图返回一个 JSON 对象,其中有一些数据和图像。

我尝试了几种方法,以字节数组返回图像并将 GetMapping 注释设置为 Produce =“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 对象的样子,在"file"中我想要实际的图像。

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

最佳答案

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

@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;
  }

关于java - 如何将图片返回给客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56279578/

相关文章:

java - 如何在 JFree BarChart 中添加 PieChart 子图?

java - 将属性放在数据库中而不是属性文件中

java - Spring MVC上传文件到服务器目录

java - 上传文件大小超过限制时如何取消表单提交?

java - 如何从 Spring 应用程序内部加载此文件路径

java - 如何使用 FastDateFormat 使用 String 创建 Date 对象

java - 在elasticsearch中构建复合查询

java - 使用 JavaMail 附加文件

java - Spring AOP 注释不起作用

java - 单个 Spring @Transaction 中的两个 dao 方法