본문 바로가기
개발자의 정보/Java & framework

spring framework ResourceHandler를 이용한 외부 디렉토리 파일 다운로드

by pastory 2020. 2. 16.

외부 특정 디렉토리에 다운로드 가능한 파일들을 저장해 두고 파일을 다운로드 할 수 있도록 하는 방법이다. 컨트롤러를 만들어 하는 방법도 있겠으나 Recource를 이용하여 별다른 컨트롤러를 따로 만들지 않고도 구현 가능하다.

WebMvcConfigurer를 통해 리소스 디렉토리를 지정하면 된다.

@Configuration
public class ResourceConfig implements WebMvcConfigurer {
	final Path FILE_ROOT = Paths.get("./project_files").toAbsolutePath().normalize();
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry
        	// 다운로드 매핑할 uri 지정
			.addResourceHandler("/resources/**")
			// 실제 파일이 존재하는 디렉토리 지정(일반적으로 application.properties 를 이용한다)
			.addResourceLocations(FILE_ROOT.toUri().toString());
	}
}

spring framework의 장점. 간결한 몇줄 코드로 해결 가능하다.

주의사항
spring-security를 사용하고 있다면 아래와 같은 추가 설정이 필요하다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	public void configure(WebSecurity web) throws Exception {
		web.ignoring().antMatchers(
				"/resources/**",
				...
		);
	}
}

댓글