Back_end/Spring
Spring - 파일 업로드(multipart)
hyeon1016
2024. 11. 19. 12:19
What
multipart를 활용하여 뷰에서 파일을 서버로 업로드하여 저장하는 기능이다.
* 텍스트 파일, 이미지 파일, 문서 등 다양한 종류의 파일을 서버로 전송하고 관리할 수 있다.
Why
사용자로 부터 파일을 받아 서버에 저장하고 처리하기 위해 사용한다.
* 프로필 사진, 게시글 이미지, 첨부 파일 등등
서버에 파일을 저장하면 데이터를 중앙에서 관리하고 필요할 때 재사용하기 좋다.
How
의존성 추가
pom.xml
파일 업로드를 처리하기 위한 commons-fileupload, commons-io 의존성 추가
<!-- 파일 업로드 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
객체 생성
servlet-context.xml에서 CommonsMultipartResolver 객체를 생성한다.
<!-- 파일 업로드 객체 생성-->
<!-- 참조변수 -->
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 클래스 -->
<!-- 생성자의 파라미터로 사용할 변수 -->
<!-- 업로드 파일의 최대 크기를 설정 -->
<beans:property name="maxUploadSize" value="10000000000000"/>
</beans:bean>
사용방법
- @RequestParam으로 받아 업로드 하는 것과 @ModelAttribute로 받아 업로드하는 방식이 있다.
View
파일 업로드를 위한 폼 페이지 작성
*전송방식은 데이터 크기의 제한과 보안상 이유로 반드시 POST 방식으로 설정해야 한다.
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<button type="submit">업로드</button>
</form>
Controller
@PostMapping("/upload")
public String uploadFile(
@RequestParam("file") MultipartFile file,
HttpServletRequest request) {
//1. 파일 이름 만들기
String saveName = file.getOriginalFilename();
String savePath = request.getServletContext().getRealPath("/resources/img");
//2. 빈 파일 생성
File destinationFile = new File(savePath, saveName);
//3. 생성한 파일에 내용 작성
if(file!=null && !file.isEmpty()) {
try {
file.transferTo(destinationFile);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException("이미지 업로드에 실패했습니다.", e);
}
}
return "uploadResult";
}
MultipartFile
스프링 프레임워크에서 제공하는 인터페이스로 HTTP 요청을 통해 전송된 파일을 다루며 파일 내용에 접근할 수 있다.
메서드 | 반환타입 | 설명 |
getName() | String | multipart 폼에서 파라미터의 이름을 반환 |
getContentType() | String | 파일의 콘텐츠 형식을 반환 |
getOriginalFilename() | String | 파일의 실제 이름을 반환 |
isEmpty() | boolean | 업로드한 파일이 있는지 반환 |
getSize() | long | 바이트의 파일 크기를 반환 |
getBytes() | byte[] | 바이트의 배열로 파일 내용을 반환 |
getInputStream() | InputStream | 파일 폼의 내용을 읽어 반환 |
transferTo(File dest) | void | 수신된 파일을 지정한 대상 파일에 전송 |
View
<h3>파일 업로드에 성공했습니다.</h3>