Почему Java Spring Boot не предоставляет доступ к статическим данным сразу?

Всем привет. помогите разобраться. у меня бэкэнд серверная часть на Java Spring Boot, а фронт на React (вдруг это важно). Так вот, я с фронта загружаю файлы в папку

\src\main\resources\static\uploads\categories

и при переходе на страницу файла

http://localhost:8080/uploads/categories/photo1712842742.jpeg

выходит ошибка

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

Sun Jun 09 21:50:38 VLAT 2024 There was an unexpected error (type=Not Found, status=404).

я гуглил, и нашёл, что можно настроить доступ к файлам через application либо файл конфигурации, если нужен доступ ко всей структуре файлов \resources\static\uploads** я создал такой файл в таком виде

package main.configurations;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/uploads/**")
                .addResourceLocations("classpath:/static/uploads/")
                .setCachePeriod(0); // Отключение кеширования
    }
}

не помогло. и в таком виде:

package main.configurations;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/uploads/**")
                .addResourceLocations("file:uploads/")
                .setCachePeriod(0); // Отключение кеширования
    }
}

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


Ответы (1 шт):

Автор решения: Ruslan P.
addResourceLocations("classpath:/static/uploads/")

В этом случае будут доступны файлы из \src\main\resources\static\uploads скопированные в classpath при сборке, что очевидно, не подходит т.к. должны отдаваться файлы, загруженные на сервер во время работы приложения.

.addResourceHandler("/static/uploads/**")
.addResourceLocations("file:uploads/")

Выглядит, как будто бы static здесь лишний, а вот в части с file нужно понимать, что это относительный путь относительно корня проекта, можно указать абсолютный, а лучше вынести в конфигурацию приложения.

Также, spring boot должен из коробки поддерживать указание путей со статическими файлами в пропертях:

spring.web.resources.static-locations=file:/my/uploads,classpath:/static/

→ Ссылка