1. 파일 업로드를 위한 dependency 추가
commons-fileupload, commons-io
<!-- file upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2. root-context.xml에 mutilpartResolver설정
따로 파일 만들어서 등록해주는 것도 가능
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="102400"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>
3. form작성
method="post"와 enctype="multipart/form-data"필수 지정
스프링 시큐리티를 사용할 경우 action경로 뒤에 csrf토큰을 입력. (multipart/form-data로 전송할 경우에만)
${_csrf.parameterName}=${_csrf.token}
<form action="컨트롤러경로?${_csrf.parameterName}=${_csrf.token}" method="post" enctype="multipart/form-data">
<input type='file' name="file"/>
<input type="text" name="title" placeholder="제목" />
<!-- 생략 -->
<input type="submit" value="저장" />
</form>
3. 컨트롤러 작성
MultipartHttpServletRequest를 통해 파일에 접근 가능
@PostMapping("/write-processing")
public String writePrecessing(ReviewDto reviewDto,
MultipartHttpServletRequest mtf) throws Exception{
// 파일 태그 name
String fileTag = "file";
// 업로드 파일이 저장될 경로
String filePath = "C:\\경로설정";
// 파일 얻기
MultipartFile file = mtf.getFile(fileTag);
if(file.isEmpty()) {
// 파일 업로드 하지 않은 경우 처리
}else {
String fileName = file.getOriginalFilename();
try {
// 파일 업로드 처리
} catch(Exception e) {
// 오류 발생
}
}
return "redirect:/";
}
@RequestParam으로 받는 것도 가능
@RequestParam("태그네임") MultipartFile ~
@PostMapping("/write-processing")
public String writePrecessing(ReviewDto reviewDto,
@RequestParam("file") MultipartFile file) throws Exception{
// 컨트롤러 처리
return "redirect:/";
}
+) 파일 저장하기
commons-io와 FileUtils를 사용하여 간단하게 저장
이 방법 외에도 transferTo를 이용해 저장하는 것도 가능
public static void saveFile(MultipartFile uploadFile) {
String originalFileName = uploadFile.getOriginalFilename();
String fileExtention = getFileExtention(originalFileName);
String newFileName = getNewFileName() + fileExtention;
File file = new File(PATH_STRING + "/" + newFileName);
// File file = new File( PATH_STRING , newFileName ); 동일한 결과
try {
FileUtils.writeByteArrayToFile(file, uploadFile.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
+) 결과
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | JWT를 사용하는 Spring Security 로그인 ( REST API ) (4) | 2020.10.07 |
---|---|
Spring | properties 사용하기 (0) | 2020.07.09 |
Spring | 스프링 시큐리티(Spring Security) (4) MyBatis이용 로그인 (1) | 2020.07.02 |
Spring | 스프링 시큐리티(Spring Security) (3) JDBC 로그인 (3) | 2020.06.30 |
Spring | 스프링 시큐리티(Spring Security) (2) 로그인 구현 (0) | 2020.06.27 |