파일업로드

예지성준·2024년 7월 16일

스프링프레임워크

목록 보기
12/14
post-thumbnail

스프링 파일 업로드(MultipartFile)

1.multipart란?💡

<form> 속성 : enctype="multipart/form-data"

  • multipart
    • 일반 양식 데이터의 파트
    • 파일 데이터(바이너리 데이터) 파드

기본 양식 content-type
application/x-www-form-urlencoded

2. web.xml 설정

<multipart-config>
            <!-- 한번에 보낼 수 있는 파일 용량 설정-->
            <!--한 파일당 최대 용량-->
            <max-file-size>20971520</max-file-size> <!--  1MB * 20 -->
            <!--한번에 보낼 수 있는 최대 용량(최대 업로드 파일 용량)-->
            <max-request-size>62914560</max-request-size> <!-- 60MB -->
            <file-size-threshold>20971520</file-size-threshold>
        </multipart-config>

bit - 8
1byte - 8 bit
1K바이트 - 1024byte
1메가바이트 - 1024Kbyte

한 파일당 20M로 한정하고싶을때
20mb -> 1024 1024 20

요청 컨트롤러와 뷰작성

파트별로 구분할 수 있는 키값이 포함됨

3.MultipartFile 인터페이스

요청데이터에 주입하면 파일 데이터가 여기로 넘어옴
파일을 바로 업로드 할 수있게 해준다.

@RequestPart -> 어떤이름으로 넘어올지 알려줌

파일 이름 가져 올 수 있다.

  • 동일 이름의 여러 파일을 전송하는 경우
    MultipartFile[]와 같은 배열로 주입

◻ MultipartFile 인터페이스

  • transferTo(): 임시폴더에 파일이 올라가있고 내가 원하는 경로로 넘겨줌


파일 정적 경로 설정

파일 설정 클래스

파일 설정 추가

4. addResourceHandlers 설정

  • 파일 업로드 경로 -> 서버 접근 URL로 연결

프로필

1. @Profile

설정클래스 정적 내부클래스로 분리함
-> 빈 분리를 위해

개발 환경과 실제 사용 환경이 다를 수 있기 때문에 프로파일 설정에 따라서 분리해줌
profile이 dev일 경우 DBConfigDev 설정 파일을 보고 빈을 생성해줌
prod일 경우 DBConfigProd를 보고 빈을 생성해줌

.env.dev 파일과 .env.prod파일을 만들어서 개발용 환경변수, 배포용 환경변수를 따로 관리함

2. spring.profiles.active

  • 지정된 환경변수 값 -> @Profile에 설정시 @Bean을 프로필에 따라서 달리 생성하는 기능

1) web.xml

<init-param>
   <param-name>spring.profiles.active</param-name>
   <param-value>dev</param-value>
</init-param> 

<init-param>
   <param-name>spring.profiles.active</param-name>
   <param-value>prod</param-value>
</init-param> 

Profile을 설정하지 않았을 경우에는 오류발생!

!prod로 @Profile 설정했을 경우 -> dev 설정 빈으로

!dev로 @Profile 설정했을 경우 -> prod 설정 빈으로

이런 방식으로 하는건 좋지않다 계속 바꿔줘야하니까!!💢💢

🔽 🔽 🔽

위처럼 하지 말고 배포서버에서 환경변수 형태를 실행과정중에 프로필설정 바꾸기!

현재 DBConfig에서 배포하는 db계정을 코드로 쓰고 있는데 내 서버가 해킹당할 가능성이 크다. 그래서 이런식으로 연결설정을 코드 형태로 나타내는것은 옳지 않다.💢💢

🔽 🔽 🔽

환경변수 이용해서 실행과정중에 설정하자 3)번

2) 배포 파일 실행시

java -jar -Dspring.profiles.active=프로필이름

3) 환경 변수를 조회하는 방법

System.getEnv("환경 변수명")

프로퍼티 파일을 이용한 프로퍼티 설정

  • 스프링은 외부의 프로퍼티 파일을 이용해서 스프링 빈을 설정하는 방법을 제공한다.

1. @Configuration

public static PropertySourcesPlaceholderConfigurer properties() {
		PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
		configurer.setLocations(
				new ClassPathResource("db.properties"),
				new ClassPathResource("info.properties"));
		return configurer;
}

파일 업로드 경로가 바뀔 수 있으므로 (배포 환경에 따라서 다르게 설정할 수 있도록)

개발 pc들이 각각 다름 환경이 다르기 때문에 설정파일 한가지만 가지고 하게되면 동작이 안되는 경우가 발생한다
-> 환경변수인 spring.profiles.active로 설정파일 분리해서 읽어옴

환경변수에 따라서 설정을 읽어옴

spring.profiles.active=dev
-> application-dev (dev일경우 이거로 읽어옴)

spring.profiles.active=prod
-> application-prod

2. @Value("${프로퍼티 키값}")

  • 주입되는 값은 전부 문자열

fileController 경로 수정

이렇게 수정해도 경로로 잘 이동되고 파일 올릴 수 있다.

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글