Spring Boot/4. 파일 업로드와 다운로드

파일 첨부를 위한 설정

ch.0 2022. 10. 31. 15:27


파일 테이블 생성하기

 

create table t_file(
idx int(10) unsigned not null auto_increment comment '일련번호',
board_idx int(10) unsigned not null comment '게시글 번호',
original_file_name varchar(255) not null comment '원본 파일 이름',
stored_file_path varchar(500) not null comment '파일 저장 경로',
file_size int(15) unsigned not null comment '파일 크기',
creator_id varchar(50) not null comment '작성자 아이디',
created_datetime datetime not null comment '작성시간',
updator_id varchar(50) default null comment '수정자 아이디',
updated_datetime datetime default null comment '수정시간',
deleted_yn char(1) not null default 'N' comment '삭제 여부',
primary key (idx));

 


라이브러리 추가하기

스프링 프레임워크에는 파일 업로드를 위한 MultipartResolver 인터페이가 정의되어 있다. 일반적으로 스프링에서 사용되는 구현체는 2가지다.

1. 아파치의 Common Fileupload를 이용한 CommonsMultipartResolver

2. 서블릿 3.0 이상의 API를 이용한 StandardServletMutipartResolver

 

1번을 사용할 예정이며, 이 라이브러리에서 commons-fileupload는 commins-io 라이브러리를 이용하기 때문에 두 개의 라이브러리를 추가해야 한다.

 

board\build.gradle

implementation group: 'commons-io', name: 'commons-io', version: '2.6'
implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.3'

 

 

 

파일 처리를 위한 빈 설정

board\src\main\java\board\configuration\WebMvcConfiguration.java

	@Bean
	public CommonsMultipartResolver multipartResolver() {
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
		commonsMultipartResolver.setDefaultEncoding("UTF-8");
		commonsMultipartResolver.setMaxUploadSizePerFile(5 * 1024 * 1024);
		return commonsMultipartResolver;
	}

5: 파일크기를 제한함 바이트(byte) 단위

 


파일 관련 자동구성 제거

 

스프링 부트이 특성 중 하나는 애플리케이션의 스프링 설정이 자동으로 구성된다는 점이다. 앞에서 multipartResolver를 등록했기 때문에 첨부파일과 관련된 자동 구성을 사용하지 않도록 변경해야 한다.

 

 

board\src\main\java\board\BoardApplication.java

 

AS-IS

@SpringBootApplication

TO-BE

@SpringBootApplication(exclude= {MultipartAutoConfiguration.class})