[SPRING] 5장 컨트롤러 요청 처리 4 (8. 파일 업로드 폼 방식 요청 처리)

jychae·2022년 12월 5일
0

스프링

목록 보기
10/12

8. 파일 업로드 폼 방식 요청 처리

스프링 에러 날 때 또는 준비사항

✨✨✨✨✨ 중요 ! ! !

[파일 업로드 폼 방식 요청 처리를 하기전, 준비사항]

[1]. pom.xml에 commons-fileupload, commons-io 라이브러리 의존 관계 등록
✨ maven project update를 진행하여 업데이트한다.
✨ 업데이트를 진행하지 않는 경우, 내가 등록한 의존관계가 제대로 적용되지않아 라이브러리를 사용하는데 있어 에러가 발생할 수 있습니다
✨ 업데이트를 진행할 때, 하단 오른쪽에 progress Bar 형태가 다운로드 되고 있는 형태로 바뀌고, 100%로 바뀌면 다운로드가 완료되어 적용이 완료된 것입니다.
✨ Maven Project Update를 진행하였는데 내가 작성하고 있는 프로젝트에서 에러가 발생한다?
✨ Clean! Clean! Clean! Clean! ! ! ! !
[2]. web.xml에 모든 경로에 대해서 MultipartFilter를 등록합니다.
✨ 스프링에서 제공하는 MultipartFilter를 이용합니다.

✨✨✨✨✨ 위와 같은 설정을 진행하였는데도 에러가 나는 경우 조치방법
[3]. servers > context/xml 로 이동하여 Context 태그 옵선을 추가합니다.
✨[ allowCasualMultipartparsing="true" path="/" ] 옵션 추가 (Context 태그내)
✨ex)

<Context allowCasualMultipartparsing="true" path="/"	> ..... </Context>

1. 파일 업로드 폼 파일 요소값과 스프링 MVC가 지원하는 MultipartFile 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile01
처리 : String registerFile01(MultipartFile picture) throws Exception

2. 파일 업로드 폼 파일 요소값과 스프링 MVC가 지원하는 MultipartFile 매개변수와 문자열 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile02
처리 : String registerFile02(String userId, String password, MultipartFile picture) throws Exception

3. 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 매개변수와 자바빈즈 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile03
처리 : String registerFile03(Member member, MultipartFile picture) throws Exception

4. 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 FileMember 타입의 자바빈즈 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile04
처리 : String registerFile04(FileMember fileMember) throws Exception

5. 여러개의 파일 업로드를 폼 파일 요소값을 MultipartFile 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile05
처리 : String registerFile05(MultipartFile picture, MultipartFile picture2) throws Exception

6. 여러개의 파일 업로드를 폼 파일 요소값을 MultipartFile 타입의 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile06
처리 : String registerFile06(List pictureList) throws Exception
[*** 리스트로 가져오는 경우 null발생]

7. 여러개의 파일 업로드를 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFileMember 타입의 자바빈즈 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile07
처리 : String registerFile07(MultiFileMember multiFileMember) throws Exception

	//7-2

//7-2 / 8. 여러개의 파일 업로드를 폼 파일 요소값을 MultipartFileMember 타입의 자바빈즈 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile07
처리 : String registerFile07(MultiFileMember multiFileMember) throws Exception

9. 파일 업로드를 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 타입의 배열 매개변수로 처리한다.

[요청과 처리]
요청 : /registerFile08
처리 : String registerFile08(MultipartFile[] pictureList) throws Exception


registerForm.jsp

<h4>8. 파일업로드 폼 방식 요청 처리</h4>
	<p>1) 파일 업로드 폼 파일 요소값을 스프링 MVC가 지원하는 MultipartFile 매개 변수로 처리한다</p>
	<form action="/registerFile01" method="post" enctype="Multipart/form-data">
		<input type="file" name="picture"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 
	<!-- //20221128 	 -->
	<p>2) 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 매개 변수와 문자열 매개변수로 처리한다</p>
	<form action="/registerFile02" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="picture"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 	
	<p>3) 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 매개 변수와 자바빈즈 매개변수로 처리한다</p>
	<form action="/registerFile03" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="picture"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 	
	<p>4) 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 FileMember 타입의 자바빈즈 매개변수로 처리한다</p>
	<form action="/registerFile04" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="picture"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 	
	<p>5) 여러 개의 파일 업로드를 폼 파일 요소 값을 여러개의 MultipartFile 매개변수로 처리한다</p>
	<form action="/registerFile05" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="picture"/>
		<input type="file" name="picture2"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 	
	<p>
		6) 여러 개의 파일 업로드를 폼 파일 요소 값을 MultipartFile 타입의 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다
		<font style="color: red;">받아올 수 없다!</font>
	</p>
	<form action="/registerFile06" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="pictureList[0]"/>
		<input type="file" name="pictureList[1]"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 
	<!-- 6)번하고 동일한 폼이긴 하나 요청하는 URL과 받는 타입이 다르다 --> 	
	<p>7) 여러 개의 파일 업로드 폼 파일 요소 값과 텍스트 필드 요소값을 MultipartFileMember 타입의 자바빈즈 매개변수로 처리한다</p>
	<form action="/registerFile07" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="pictureList[0]"/>
		<input type="file" name="pictureList[1]"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 
	<!-- 사진파일 다중 선택시 다중으로 넘어감!!!  --> 	
	<p>7-2) 파일 업로드 폼 파일 요소 값과 텍스트 필드 요소값을 MultipartFileMember 타입의 자바빈즈 매개변수로 처리한다</p>
	<form action="/registerFile07" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="pictureList" multiple="multiple"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>
	 	
	<p>8) 파일 업로드 폼 파일 요소 값과 텍스트 필드 요소값을 MultipartFile 타입의 배열 매개변수로 처리한다</p>
	<form action="/registerFile08" method="post" enctype="Multipart/form-data">
		<p>userId : <input type="text" name="userId" value="hongkd"> </p>
		<p>password : <input type="text" name="password" value="1234"> </p>
		<input type="file" name="pictureList" multiple="multiple"/>
		<input type="submit" value="업로드"/> 
 	</form><br/>

MembeerController

	// 8. 파일업로드 폼 방식 요청 처리
	// 파일 업로드 폼 방식
	// 1) 
	// 파일 업로드 폼 파일 요소값을 스프링 MVC가 지원하는 MultipartFile 매개 변수로 처리한다
	@RequestMapping(value = "/registerFile01", method = RequestMethod.POST) 
	public String registerFile01(MultipartFile picture){	
		logger.info("registerFile01");
		logger.info("OriginalFilename" + picture.getOriginalFilename());
		logger.info("Size" + picture.getSize());
		logger.info("ContentType" + picture.getContentType());
		return "success"; 
	}
	
	//20221128
	// 2) 
	// 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 매개 변수와 문자열 매개변수로 처리한다
	@RequestMapping(value = "/registerFile02", method = RequestMethod.POST) 
	public String registerFile02(String userId, String password, MultipartFile picture){	
		logger.info("registerFile02");
		logger.info("userId" + userId);
		logger.info("password" + password);
		
		logger.info("OriginalFilename" + picture.getOriginalFilename());
		logger.info("Size" + picture.getSize());
		logger.info("ContentType" + picture.getContentType());
		
		return "success"; 
	}
	
	// 3) 
	// 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 MultipartFile 매개 변수와 자바빈즈 매개변수로 처리한다
	@RequestMapping(value = "/registerFile03", method = RequestMethod.POST) 
	public String registerFile03(Member member, MultipartFile picture){	
		logger.info("registerFile03");
		logger.info("member.getUserId() : " + member.getUserId());
		logger.info("member.getPassword() : " + member.getPassword());
		
		logger.info("OriginalFilename" + picture.getOriginalFilename());
		logger.info("Size" + picture.getSize());
		logger.info("ContentType" + picture.getContentType());
		
		return "success"; 
	}
	
	// 4) 
	// 파일 업로드 폼 파일 요소값과 텍스트 필드 요소값을 FileMember 타입의 자바빈즈 매개변수로 처리한다
	@RequestMapping(value = "/registerFile04", method = RequestMethod.POST) 
	public String registerFile04(fileMember fileMember){	
		logger.info("registerFile04");
		logger.info("member.getUserId() : " + fileMember.getUserId());
		logger.info("member.getPassword() : " + fileMember.getPassword());
		
		MultipartFile picture = fileMember.getPicture();
		
		logger.info("OriginalFilename" + picture.getOriginalFilename());
		logger.info("Size" + picture.getSize());
		logger.info("ContentType" + picture.getContentType());
		
		return "success"; 
	}
	
	// 5) 
	// 여러 개의 파일 업로드를 폼 파일 요소 값을 여러개의 MultipartFile 매개변수로 처리한다
	@RequestMapping(value = "/registerFile05", method = RequestMethod.POST) 
	public String registerFile05(MultipartFile picture, MultipartFile picture2 ){	
		logger.info("registerFile05");
		logger.info("OriginalFilename" + picture.getOriginalFilename());
		logger.info("Size" + picture.getSize());
		logger.info("ContentType" + picture.getContentType());
		
		logger.info("OriginalFilename" + picture2.getOriginalFilename());
		logger.info("Size" + picture2.getSize());
		logger.info("ContentType" + picture2.getContentType());
		
		return "success"; 
	}
	
	// 6) 
	// 여러 개의 파일 업로드를 폼 파일 요소 값을 MultipartFile 타입의 요소를 가진 리스트 컬렉션 타입 매개변수로 처리한다
	@RequestMapping(value = "/registerFile06", method = RequestMethod.POST) 
	public String registerFile06(List<MultipartFile> pictureList ){	
		// 컬렉션 리스트로는 이미지 파일을 가져올 수 없다.
		logger.info("registerFile06");
		logger.info("pictureList.size() " + pictureList.size());
	
		for(int i = 0; i < pictureList.size(); i++) {
			logger.info("OriginalFilename" + pictureList.get(i).getOriginalFilename());
			logger.info("Size" + pictureList.get(i).getSize());
			logger.info("ContentType" + pictureList.get(i).getContentType());
		}
		
		return "success"; 
	}
	
	// 7) , 7-2) 
	// 여러 개의 파일 업로드 폼 파일 요소 값과 텍스트 필드 요소값을 MultipartFileMember 타입의 자바빈즈 매개변수로 처리한다
	// 객체 내에 존재하는 key(변수명)로 파일을 받을 수 있다.
	// 7)은 input file 2개로 객체에 mapping
	// 7-2)는 multiple 요소 이용하여 개게에 mapping
	@RequestMapping(value = "/registerFile07", method = RequestMethod.POST) 
	public String registerFile07(MultiFileMember multifileMember){	
		logger.info("registerFile07");
		
		List<MultipartFile> pictureList =  multifileMember.getPictureList();
		logger.info("registerFile07 pictureList.size() : " + pictureList.size());
		
		for(MultipartFile picture : pictureList) {
			logger.info("OriginalFilename" + picture.getOriginalFilename());
			logger.info("Size" + picture.getSize());
			logger.info("ContentType" + picture.getContentType());
		}
		
		return "success"; 
	}
	
	// 8) 
	// 파일 업로드 폼 파일 요소 값과 텍스트 필드 요소값을 MultipartFile 타입의 배열 매개변수로 처리한다
	@RequestMapping(value = "/registerFile08", method = RequestMethod.POST) 
	public String registerFile08(MultipartFile[] pictureList){	
		logger.info("registerFile08");
		logger.info("registerFile08 pictureList.length : " + pictureList.length);
		
		for(MultipartFile picture : pictureList) {
			logger.info("OriginalFilename" + picture.getOriginalFilename());
			logger.info("Size" + picture.getSize());
			logger.info("ContentType" + picture.getContentType());
		}
		
		return "success"; 
	}
	
	
	
}
profile
안녕하세요! 초보개발자 공부 시작!

0개의 댓글