[Spring] 파일 업로드

리트리버J

·

2020. 11. 7. 09:08

728x90

1. pom.xml에 Maven dependency를 추가해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- ******* 파일업로드  ******* -->
<!-- 파일업로드 관련 라이브러리 추가 -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
   <groupId>commons-io</groupId>
   <artifactId>commons-io</artifactId>
   <version>2.6</version>
</dependency>
cs
 
2. jsp에서 form태그의 enctype의 속성을 "multipart/form-data"로 맞춰준다.
 
1
2
3
4
<form action="pInsert.do" method="post" enctype="multipart/form-data" >
      <input type='file' id='upload' name='upload'/>
      <button>등록완료</button>
</form>
cs
 
 
3. Controller에서 받아준다.

* 주의 *
     
input 태그로 업로드 한 파일의name과 객체에 파일명(~.jpg)으로 넣을 변수명이 같다면,
Product 객체의 변수를 인식하여, String으로 File객체가 들어가 버린다..!

그렇기 때문에 @RequestParam과 jsp의 name을 "_pic"따위로 다르게 해준 다음, 
setter를 통해 File객체의 getOriginalFilename()메소드를 통하여 설정해준다. 

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
32
33
34
35
36
@RequestMapping(value = "pInsert.do")
public String insertProduct(Model model,Product product, 
                            HttpServletRequest request,
                            @RequestParam(name="pic", required=false) MultipartFile file) {
 
     // @RequestParam어노테이션을 이용한 업로드 파일 접근
     // form의 enctype이 multipart/form-data로 작성되어있어야하고, method=POST이어야한다.
     // MultipartResolver가 multipartFile객체를 컨트롤러로 전달할 수 있다.
 
     // * 주의 *
     
     // input 태그로 업로드 한 파일의name과 객체에 파일명(~.jpg)으로 넣을 변수명이 "pic"으로 같다면,
     // Product 객체의 pic변수를 인식하여, String pic으로 File객체가 들어가 버린다..!
 
     // 그렇기 때문에 @RequestParam과 jsp의 name을 "_pic"따위로 다르게 해준 다음, 
     // setter를 통해 File객체의 getOriginalFilename()메소드를 통하여 설정해준다. 
 
     // 상품이미지 등록
     if(!file.getOriginalFilename().equals("")) {
      // 서버에 업로드 해야한다.
      String renamePic = saveFile(file,request);
      if(renamePic != null) {
        product.setPic(file.getOriginalFilename());
        product.setRenamePic(renamePic);
        }
      }
   
      int result = pService.insertProduct(product);
  
      if(result==1) {
         return "user/product/productDetail";
      }else {
         return "user/product/productDetail";
      }
 }
 
cs

3. ~을 해준다.

 
3. ~을 해준다.
 
3. ~을 해준다.
 
3. ~을 해준다.
 
3. ~을 해준다.
 
 
 
728x90