Почему 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 шт):
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/