package com.tourguide.config;
|
|
import com.tourguide.config.properties.StorageProperties;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
import java.nio.file.Paths;
|
|
@Configuration
|
public class WebMvcConfig implements WebMvcConfigurer {
|
private final StorageProperties storageProperties;
|
|
public WebMvcConfig(StorageProperties storageProperties) {
|
this.storageProperties = storageProperties;
|
}
|
|
@Override
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
registerResourceHandler(registry, storageProperties.getAvatarPublicPath(),
|
storageProperties.getAvatarDirectory(), "/uploads/avatars");
|
registerResourceHandler(registry, storageProperties.getGuideApplicationPublicPath(),
|
storageProperties.getGuideApplicationDirectory(), "/uploads/guide-applications");
|
registerResourceHandler(registry, storageProperties.getReviewImagePublicPath(),
|
storageProperties.getReviewImageDirectory(), "/uploads/review-images");
|
}
|
|
private void registerResourceHandler(ResourceHandlerRegistry registry, String publicPath,
|
String directory, String defaultPublicPath) {
|
String normalizedPublicPath = normalizePublicPath(publicPath, defaultPublicPath);
|
String resourceLocation = Paths.get(directory).toAbsolutePath().normalize().toUri().toString();
|
registry.addResourceHandler(normalizedPublicPath + "/**")
|
.addResourceLocations(resourceLocation.endsWith("/") ? resourceLocation : resourceLocation + "/");
|
}
|
|
private String normalizePublicPath(String publicPath, String defaultPublicPath) {
|
String normalized = publicPath == null ? defaultPublicPath : publicPath.trim();
|
if (!normalized.startsWith("/")) {
|
normalized = "/" + normalized;
|
}
|
while (normalized.endsWith("/")) {
|
normalized = normalized.substring(0, normalized.length() - 1);
|
}
|
return normalized;
|
}
|
}
|