| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- jointpoint
- .xml
- frontController
- SpringBoot
- @
- springjdbc
- @RequestMapping
- @RequestParam
- @Valid
- 비즈니스레이어
- @ResponseBody
- 어노테이션
- gradle
- Java
- springmvc
- 서비스레이어
- application.properties
- produces
- 스프링
- spring
- Model
- MVC
- PointCut
- after-throwing
- c:if
- 의존주입
- AOP
- 바인딩변수
- 생성자주입
- 유효성검사
- Today
- Total
메모장
Spring 파일 업로드 본문
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를 만들때 하나 더 만들면 중복이 된다.
새로운 전용 폴더를 만들어서 시스템을 붙여넣는다.
- 전용 폴더를 만들어 보자



이 전용 폴더가 항상 자동 동기화가 됐으면 좋겠어서
설정해주기 !
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 파일 안에 복사본이 생성된 것을 확인 할 수 있다.
'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 |