Как принять все вложенные подкаталоги вплоть до PathVariable в Spring Boot? - PullRequest
0 голосов
/ 06 апреля 2020

Фон

Я пытаюсь получить доступ к изображениям, содержащимся в classpath:resources/images. В каталоге изображений содержатся подкаталоги.

Issue

При доступе, например, localhost:<springboot-port>/images/some-sub-directory/some-image.png Мне выдается ошибка:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Apr 06 19:52:20 UTC 2020
There was an unexpected error (type=Not Found, status=404).
SRVE0295E: Error reported: 404

Как я могу получить доступ к изображениям из подкаталогов таким способом?

Код

@RestController
public class ImagesController {
    @CrossOrigin
    @RequestMapping(value = "/images/{filePath}", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE)
    public void getImage(@PathVariable("filePath") String filePath, HttpServletResponse response) throws IOException {
        response.setContentType(MediaType.IMAGE_PNG_VALUE);
        StreamUtils.copy(new ClassPathResource("images/" + filePath).getInputStream(), response.getOutputStream());
    }
}

1 Ответ

1 голос
/ 06 апреля 2020

КРАТКИЕ СВЕДЕНИЯ: замените "/" на "% 2F" внутри переменной пути в части URL, когда вы вызываете ее (из браузера или почтальона или чего-либо еще)

Использование "/ "внутри вашего PathVariable предотвращает синтаксический анализ этой переменной пути контроллером:

Когда вы вызываете localhost:<springboot-port>/images/some-sub-directory/some-image.png, контроллер пытается сопоставить маршрут /images/{var1}/{var2}, где var1 = some-sub-directory и var2 = some-image.png, и завершается неудачей.

Я предлагаю вам найти способ кодирования "/" в строке, которая будет передана как переменная пути, затем вы декодируете ее внутри метода, и только тогда вы создаете URI запрошенного изображения. (заменяя все, что вы используете в качестве кода на "/")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...