Не удается получить доступ к файлу изображения из src / main / webapp / WEB-INF / resources / img в контроллере для отображения в jsp - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь отобразить изображения из папки src/main/webapp/WEB-INF/resources/img/ (отличается от src/main/resources)

@Controller
@RequestMapping("/items")
public class ItemsController {
    @GetMapping( "/images/{itemId}")
    @ResponseBody
    public byte[] getItemImageById(@PathVariable long itemId) throws IOException {
           BufferedImage originalImage =
                ImageIO.read(
            new File("/WEB-INF/resources/img/" + itemId + ".png"));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write( originalImage, "png", baos );
        baos.flush();
        byte[] imageInByte = baos.toByteArray();
        baos.close();
        return imageInByte;
    }
}
<img src='${pageContext.request.contextPath}/items/images/1'/>

Не получается - нет изображения, но если я заменю путь в File конструктор с абсолютным путем вроде этого: C://.../some_file.png работает нормально.

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Вы не можете go через «Файл» прочитать ваше изображение, вам нужно go через ServletContext .

@Controller
@RequestMapping("/items")
public class ItemsController {

   @Autowired
   ServletContext context;

    @GetMapping( "/images/{itemId}")
    @ResponseBody
    public byte[] getItemImageById(@PathVariable long itemId) throws IOException {
           BufferedImage originalImage =
                ImageIO.read(context.getResourceAsStream("/WEB-INF/resources/img/" + itemId + ".png"));

        // your original code
    }
}
0 голосов
/ 17 марта 2020

Другой подход, который работал для меня:

@Autowired
ResourceLoader resourceLoader;

Resource resource =  resourceLoader.getResource(
                "/WEB-INF/resources/img/" + itemId + ".png");
String path = resource.getFile().getPath();
return Files.readAllBytes(Paths.get(path));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...