MultipartFile 인터페이스
- 개념
- 업로드한 파일 정보 및 파일 데이터를 표현하기 위한 용도로 사용된다.
- 주요 메서드
- String getName() : 파라미터 이름을 구한다.
- String getOriginalFilename() : 업로드한 파일의 원본 이름을 구한다.
- boolean isEmpty() : 업로드한 파일이 존재하지 않는 경우 true를 리턴 한다.
- long getSize() : 업로드한 파일의 크기를 구한다.
- byte[] getBytes() throws IOException : 업로드한 파일의 데이터를 구한다. (중요)
스프링에서 파일 업로드 절차
1. 라이브러리 구축 및 multipartResolver 등록
**1-1 라이브러리 구축 (pom.xml)**
1-2 multipartResolver 등록 (dispatcher-survlet.xml)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
2. MultipartFile 받아오기 (방법 3)
- @RequestParam 이용 →
@RequestParam(”upload”) MultipartFile upload
- MultipartHttpServletRequest 이용
- DTO 이용
3. 복사하기 (메서드로 만들기)
try {
// 원본
byte bytes[] = upload.getBytes();
// 빈 용지
File f = new File("c:/student_java/upload/"+upload.getOriginalFilename());
// 복사기
FileOutputStream fos = new FileOutputStream(f);
// 버튼눌러서 복사
fos.write(bytes);
// 복사 끝나면 종료
fos.close();
}catch(IOException e){
e.printStackTrace();
}
- 원본
- getBytes() 호출하는 이유
- Java에서 파일을 복사·저장하려면 반드시 메모리의 바이트(byte[]) 형태로 읽어와야 하기 때문
- 빈 용지
- 이 경로에 이런 이름의 파일을 가리킬 객체를 만들겠다
- 복사기
- FileWriter를 쓰지 않고 FileOutputStream을 쓰는 이유
- Java의 문자(char)는 2바이트고 FileWriter는 문자를 기준으로 동작하므로 바이너리 파일을 문자로 해석하는 순간 데이터가 망가진다. FileOutputStream을 쓰는 이유는 파일을 ‘바이트 그대로’ 아무 해석·변환 없이 디스크에 기록하기 위해서다.
- 버튼 눌러서 복사
- FileOutputStream fos라는 복사기를 만들어 놓고 원본 파일을 넣어서 버튼 누르기(write)
- 복사가 끝났으면 종료