파일업로드를 구현할때가 굉장히 많을 것이다.
하지만 여러가지 상황으로 파일하나만 올리는지, 파일과 추가정보를 같이 보내는지, 여러파일을 올리는지에 따라 사용법이 다르기 때문에 정리해 놓으려고 한다.
- 단일 파일 업로드
- 다중 파일 업로드
- 파일업로드 + 추가정보 => @RequestParam => 개별로 (파일&추가정보)
- 파일업로드 + 추가정보 => @ModelAttribute => 한번에 클래스 매핑
보통 스프링에서 파일업로드를 사용할때 두가지 방식 중 하나를 선택해서 사용한다.
- Servlet 3.0 Multipart Request 사용
- Apache Commons FileUpload API 사용
나는 Commons Fileupload를 사용해서 정리를 해놓을 예정이다.
1). Dependency추가
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
2). Servlet-context.xml => Bean정의 파일 설정
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="1000000000"/>
<beans:property name="maxUploadSizePerFile" value="1000000000"/>
<beans:property name="maxInMemorySize" value="500000000"/>
</beans:bean>
나머지는 사용
form 태그의 enctype 속성은 multipart/form-data로 세팅하여 브라우져가 파일 업로드 방식으로 동작하도록 설정합니다.
enctype 속성 값 목록
값 |
설명 |
multipart/form-data |
파일 업로드시 사용 (인코딩 하지 않음) |
application/x-www-form/urlencoded |
디폴트값으로 모든 문자를 인코딩 |
text/plain |
공백은 + 기호로 변환함. 특수문자는 인코딩하지 안함 |
우선 나는 4번 파일업로드 + 추가정보를 @ModelAttribute로 사용해보려고한다. (이유는 개별변수로 저장하게 되면 입력데이터가 많을 시 관리하기가 귀찮아지는 단점이있어서 자동매핑을 사용해보려고 한다)
3). Vo 만들기
Vo를 나눠 파일과 추가정보를 각각 보기좋게 사용하였다.
//1번 메인(추가정보들)
public class MainVo{
private String name;
private String age;
private ArrayList<FileVo> fileList;
}
//2번 파일(파일관련 정보들)
public class FileVO {
private String fileName;
private MultipartFile mediaFile;
}
4). Controller에서 파일 및 추가정보 받기
@ModelAttribute를 사용하면 이름을 설정해준 Vo에 getter,setter 메서드를 통해 Spring에서 자동 매핑시켜 담아준다.
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public String fileUploadWith(@ModelAttribute MainVo mainVo) throws IOException {
//......나머지 코드
}
위처럼 MainVo로 받아버리면, 파일의 갯수가 많을때는 fileList 변수에 자동 매핑 되어 담기게 되고, 나머지 추가 정보는 알아서 변수에 담기게 되어 깔끔하게 사용할 수 있다.
'Spring-JSP' 카테고리의 다른 글
[Spring-JSP] 엄청쉬운Poi Excel 업로드 기능 구현 (0) | 2021.02.17 |
---|---|
[Spring-JSP] Custom Annotation만드는 방법 정리 (0) | 2021.02.09 |
[Spring-JSP]문자열 출력시 공백 및 줄바꿈 적용 (0) | 2021.01.22 |
[Spring-JSP] AES-256 암호화 (0) | 2020.11.17 |
[Spring-JSP] RSA 암호화 (0) | 2020.11.17 |