Черный фон при отображении изображения в REST API с помощью Spring

#java #spring #image #file-io #inputstream

#java #spring #изображение #file-io #входной поток

Вопрос:

Я хочу вернуть ссылку на изображение (или само изображение) при выполнении 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 я получил следующее:

введите описание изображения здесь

И когда я открываю изображение в отдельном окне, я получаю следующее: введите описание изображения здесь

Как можно исправить эту проблему? Я пишу Rest MVC приложение, используя Spring Boot , Hibernate , PostgreSQL .

Ответ №1:

Попробуйте этот код:

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

Комментарии:

1. Указатель нуля. Переменная in = null

Ответ №2:

Получите 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());
}
  

Комментарии:

1. NullPointer в переменной in

2. Вам нужно поместить свой файл в контекст приложения (в ваш war / jar)

3. в ресурсах?

4. Я добавил папку с изображениями в resources папку. Теперь путь выглядит так: C:UsersvartanyanIdeaProjectsCoffeeteareasrcmainresourcesimagesPuer.jpg но также и NullPointer. По идее это выглядит так: InputStream in = request.getServletContext().getResourceAsStream("C:\Users\vartanyan\IdeaProjects\Coffeetearea\src\main\resources\images\Puer.jpg");

5. InputStream in = request.getServletContext().getResourceAsStream("images/Puer.jpg"); не работает

Ответ №3:

Я добавляю 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());
    }