使用Spring在REST API中显示图像时黑色背景

问题描述

我想在进行GET请求时返回指向图像(或图像本身)的链接。我看了Baeldung的教程,并决定使用它。代码如下:

@RequestMapping(value = "/image-manual-response",method = RequestMethod.GET)
public void getImageAsByteArray(HttpServletResponse response) throws IOException {
    InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/image-example.jpg");
    response.setContentType(MediaType.IMAGE_JPEG_VALUE);
    IOUtils.copy(in,response.getOutputStream());
}

由于我无法弄清楚servletContext是什么并且找不到我需要的信息,因此我对方法进行了少许更改:

    @GetMapping("/image")
    public void getImageAsByteArray(HttpServletResponse response) throws IOException {

        InputStream in = new ByteArrayInputStream(("C:\\Users\\vartanyan\\Desktop\\images\\Puer").getBytes());
        response.setContentType(MediaType.IMAGE_JPEG_VALUE);
        IOUtils.copy(in,response.getOutputStream());
    }

结果,在Swagger中,我得到了以下内容:

enter image description here

当我在单独的窗口中打开图像时,得到以下信息:

enter image description here

如何解决此问题?我正在使用RestMVCSpring Boot来编写Hibernate PostgreSQL应用。

解决方法

从请求中获取servletContext,如下所示:

@GetMapping("/image")
public void getImageAsByteArray(HttpServletRequest request,HttpServletResponse response) throws IOException {
    InputStream in = request.getServletContext().getResourceAsStream("images/Puer.jpg");
    response.setContentType(MediaType.IMAGE_JPEG_VALUE);
    IOUtils.copy(in,response.getOutputStream());
}
,

尝试以下代码:

@GetMapping("/image")
    public void getImageAsByteArray(HttpServletRequest request,HttpServletResponse response) throws IOException {
        InputStream in = request.getServletContext().getResourceAsStream("C:\\Users\\vartanyan\\Desktop\\images\\Puer");
        response.setContentType(MediaType.IMAGE_JPEG_VALUE);
        IOUtils.copy(in,response.getOutputStream());
    }
,

我添加了FileInputStream()实现。例如:

public void getDrinkImage(HttpServletResponse response,Long drinkId) throws IOException {

        String imageURL = drinkRepository.getById(drinkId).getImage();

        InputStream in = new FileInputStream(uploadPath + imageURL);
        response.setContentType(MediaType.IMAGE_JPEG_VALUE);
        IOUtils.copy(in,response.getOutputStream());
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...