1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

멀티 파트 폼 데이터
🌱 SPRING/스프링 인 액션

멀티 파트 폼 데이터

2018. 6. 13. 22:11

멀티 파트 세팅

DispatcherServlet에는 멀티 파트 요청의 데이터를 파싱하기 위한 로직이 구현되어 있지 않다. 대신, 아래의 두 인터페이스로 MultipartResolver를 구현한다.

 CommonsMultipartResolver : 멀티 파트 요청을 Jakarta Commons FileUpload를 사용하여 결정

 StandardServletMultipartResolver : 서블릿 3.0을 사용한 멀티 파트 요청에 대한 지원(spring 3.1 이상)


1
2
3
4
5
@Bean
public MultipartResolver multipartResolver () throws IOException
{
    return new StandardServletMultipartResolver();
}
Colored by Color Scripter
cs


멀티 파트에 대한 세부 설정은 아래와 같이 한다.


1
2
3
4
5
@Override
protected void customizeRegistration(Dynamic registration) 
{
    registration.setMultipartConfig(new MultipartConfigElement("/tmp/goldenDog/uploads"));  // 업로드 위치 설정
}
Colored by Color Scripter
cs


세부 설정이 가능한 것들은 아래와 같은데, 아래의 순서와 파라메터 순서는 같다.

- 업로드되는 파일의 최대 크기(byte). 기본 설정은 제한 없음.

- 전체 멀티 파트 요청의 최대 크기(byte). 기본 설정은 제한 없음.

- 임시 저장 위치에 쓰이지 않고 업로드할 수 있는 파일의 최대 크기(byte). 기본 설정은 0 이며 모든 업로드되는 파일은 디스크에 쓰인다.


예를 들어, 업로드되는 파일의  크기를 2MB로, 전체 요청의 크기는 4MB로 제한하고, 모든 파일을 디스크에 쓰도록 하고 싶다면 아래와 같이 사용하면 된다.


1
2
3
4
5
@Override
protected void customizeRegistration(Dynamic registration) 
{
    registration.setMultipartConfig(new MultipartConfigElement("/tmp/goldenDog/uploads", 2097152, 4194304, 0));
}
Colored by Color Scripter
cs


XML 설정에서는 위 설정을 web.xml을 이용한다.


1
2
3
4
5
6
7
8
9
10
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <location>/tmp/goldenDog/uploads</location>
        <max-file-size>2097152</max-file-size>
        <max-request-size>4194304</max-request-size>
    </multipart-config>
</servlet>
Colored by Color Scripter
cs



멀티 파트 요청의 처리

멀티 파트 요청을 처리하기 위한 가장 일반적인 방법은 컨트롤러 메서드의 파라메터에 @RequestPart 어노테이션을 붙이는 것이다.

뷰에서는 아래와 같은 <form>이 있을 것이다.


1
2
3
<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="image" accept="image/jpeg, image/png, image/gif" />
</form>
Colored by Color Scripter
cs


컨트롤러에서는 다음과 같이 요청을 처리한다.


<form>이 제출되면 file 애트리뷰트에 요청 파트의 데이터를 포함한 byte 배열을 넘겨준다.

파일을 선택하지 않았다면, 배열은 비어있는 상태이며, null은 아니다.


1
2
3
4
5
@RequestMapping(value="/upload", method=POST)
public String processUpload (@RequestPart("image") byte[] file)
{
    
}
Colored by Color Scripter
cs


스프링에서는 MultipartFile 인터페이스를 제공해 멀티 파트 데이터를 처리하는 다기능 객체를 이용할 수 있도록 한다.


MultipartFile은 원본 파일명, 크기, 타입 등을 얻어올 수 있고, 파일 데이터를 스트림 형태로 읽어올 수도 있다. 

또, transferTo() 메서드로 업로드된 파일을 파일 시스템에 쓰는 것도 돕는다.


아래는 업로드된 파일을 MultipartFile을 이용해 파일 시스템에 쓰는 코드다.


1
2
3
4
5
@RequestMapping(value="/upload", method=POST)
public String processUpload (@RequestParam("image") MultipartFile file)
{
    file.transferTo(new File("/data/goldendog/realFiles/" + file.getOriginalFilename()));
}
Colored by Color Scripter
cs



 


 이 포스트는 스프링 인 액션을 읽고 개인적으로 필요하다고 생각되는 내용을 정리한 포스트입니다.

일부 내용, 소스코드는 스프링 인 액션의 내용일 수 있습니다.

반응형
저작자표시 비영리 변경금지

'🌱 SPRING > 스프링 인 액션' 카테고리의 다른 글

스프링 시큐리티 ① : 기본 설정  (0) 2018.08.01
예외 처리하기  (0) 2018.07.31
자바 설정으로 Filter 등록하기  (0) 2018.06.13
DispatcherServlet 설정하기  (0) 2018.06.13
JSP 라이브러리 이용하기  (0) 2018.06.13
    '🌱 SPRING/스프링 인 액션' 카테고리의 다른 글
    • 스프링 시큐리티 ① : 기본 설정
    • 예외 처리하기
    • 자바 설정으로 Filter 등록하기
    • DispatcherServlet 설정하기
    1HOON
    1HOON

    티스토리툴바