메모장

Spring 파일 업로드 본문

Spring/개념정리

Spring 파일 업로드

Itchild 2024. 8. 7. 11:02
728x90
반응형

 

 

1. ( .jar 파일 ) 추가하기

 

<!-- 파일 업로드 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.3.1</version>

</dependency>

 

2. VIEW 페이지 <form> 태그에 속성을 추가하기

출처 입력

<form> 에 파일 입력할거야 ~ 속성을 추가하기

나 지금부터 파일 줄거거든 ? 이 form 내용을 인코딩 해주세요 이 <form> 태그를 !

스프링에서 multipart 라는걸 제공해주고 있어서 쉽게 업로드를 할 준비가 되었다.

 

 

인서트보드 포스트 방식 으로 들어왔을때

커맨드 객체에 "파일업로드" 라는 멤버변수를 가지고 있어야 한다.

 

 

3. 보드 vo 로 와서 멤버변수 만들기

 

우리가 인코딩을 스프링 제공 하는 multipart file 로 작업하고 있었기 때문에

타입을 multipart file 로 해주면 된다. getter setter 만들기

 

 


★★ 이걸 이해 하면 스프링 프레임워크를 이해할 수 있다.

 

 

우리가 insertBoard.do 요청을 하면 -> C 가 맞는 메서드를 수행

 

이 메서드 수행 전에 내부에서하는 행동들이 있는데...!

1) 커맨드 객체 (new 만들기)

2) request 내장객체로부터 값 추출

예시)

 

------------------------------------------------------------

 

★ 하나추가 ★

new : 객체를 멤버변수로 사용하는 경우

----> new 하는 작업 : 해당 객체에 맞는 Resolver 객체가 필요하다 !

 

추가하는 이유 !!

 

지금 까지 "VO" 들은 원시타입 이었다. 파일 업로드는 명백한 객체 이다.

 

다른 객체를 내 멤버변수로 사용하는것이 흔하진 않지만 종종 있다.

매번 하는건 아니지만 (String도 엄밀히 말하면 이 작업을 한다,,, 클래스니까)

 

그래서 우리는 Multipart Resolver 가 필요하다.

Resolver 는 DispatcherServlet 의 멤버변수

<bean> 을 설정 하자

 

Resolver 류는 이름을 반드시 붙여야한다. 그래서 id를 꼭 정한다. multipartResolver 라고 만들 예정

 

maxUploadSize 를 value에 해당 하는 값으로 지정할 수 있다. 업로드 용량을 결정 !

-1 로 설정하면 네트워크가 버티는 한 무제한으로 업로드가 가능하도록 !

 

------------------------------------------------------------

 

3) setter 호출

4) C가 맞는 메서드를 수행

 

 

 

 

4. 전용 폴더 만들기

 

스노우 , 인스타그램, ... 등등의 어플에서 사용되는 방법이다.

: 어플리케이션 내에 사진을 업로드 하게 되면 갤러리/사진 에 스노우,인스타그램 전용 폴더가 생긴다.

이렇게 하는 이유 ? 관리가 용이해서

 

파일명 중복을 우려하여 어플리케이션 전용 폴더를 별도로 생성,

생성된 별도의 폴더에 파일을 복사하여 저장 ==> 인스타그램 방식

 

폴더를 하나만 쓰면 a를 만들때 하나 더 만들면 중복이 된다.

새로운 전용 폴더를 만들어서 시스템을 붙여넣는다.

 

  • 전용 폴더를 만들어 보자
images폴더에 복사본이 복사될 예정

 

이 전용 폴더가 항상 자동 동기화가 됐으면 좋겠어서

설정해주기 !

Preferences -> General -> Workspace

-> Refresh using native hooks or polling (이미지 업로드시 자동 새로고침 )

 

 

5. Controller 에 로직을 추가

 

이제 파일을 받아오자

@RequestMapping(value="/insertBoard.do", method=RequestMethod.POST)
	public String insertBoard(BoardVO bVO) throws Exception {
		MultipartFile fileUpload=bVO.getFileUpload();
                          bVO 업로드를 하면 이것 자체가 파일 그 자체를 의미 한다. 
		if(!fileUpload.isEmpty()){ 받아온 파일이 비어있지않나요? == 받아온게 채워져 있나요?
                                    == 혹시 파일을 업로드 했나요 ?? 
			String fileName=fileUpload.getOriginalFilename(); 파일명 확인 로직
			System.out.println("파일명: "+fileName);
			fileUpload.transferTo(new File("C:\\HONG2\\workspace\\day60\\src\\main\\webapp\\images\\"+fileName));
			그럼 파일을 보내주시고 / 전용 폴더에 복사본을 생성해주세요 ! 경로는 위의 경로로 
            bVO.setFileName(fileName);
		}
		
		if(boardService.insert(bVO)){
			return "redirect:main.do";
		}
		else{
			return "redirect:insertBoard.jsp";
		}
	}
 

bVO.getFileUpload() 를 하면 이게 파일 그 자체를 의미

받아온 파일이 비어있지 않나요 ??== 받아온게 채워져 있나요 ??

혹시 파일 업로드를 했나요 ?{

그럼파일좀 보내주시고 / 전용 폴더에 복사본을 생성해주세요 ;

복사본을 생성해서 전용 폴더에 넣어라

파일 복사본을 넣을거다

어디에 ? 전용 폴더에 C:\HONG2\workspace\day60\src\main\webapp\images

}

 

 

6. 확인

 

webapp 의 images 파일 안에 복사본이 생성된 것을 확인 할 수 있다.

 

728x90
반응형

'Spring > 개념정리' 카테고리의 다른 글

Spring 사진 썸네일 실습  (0) 2024.08.07
Spring 업로드 사진 출력 실습  (0) 2024.08.07
Spring JDBC 실습 (selectAll / One)  (1) 2024.07.04
Spring JDBC  (1) 2024.07.04
AOP 로그 실습 (@ 어노테이션 으로 변경)  (0) 2024.07.04