[Spring MVC] 파일업로드 처리

    반응형

     

    이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다.


     

    1. commons-fileupload 라이브러리 추가

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

     

    2. dispatcher-servlet.xml 설정

    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <beans:property name="defaultEncoding" value="utf8" />
        <beans:property name="maxUploadSize" value="104857560" />
        <beans:property name="uplaodTempDir" value="file:~/upload/tmp" />
        <beans:property name="maxInMemorySize" value="10485756" />
    </beans:bean>

    dispatcher-servlet.xml은 스프링 MVC의 특정한 객체(Bean)을 설정해서 파일을 처리합니다. 파일 업로드를 할 때는 idmultipartResolver인 객체를 설정합니다.

     

    3. views/sample/exUpload.jsp 작성

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>sample/exUpload</title>
    </head>
    <body>
      <form action="exUploadPost" method="post" enctype="multipart/form-data">
        <div>
          <input type="file" name="files">
        </div>
        <div>
          <input type="file" name="files">
        </div>
        <div>
          <input type="file" name="files">
        </div>
        <div>
          <input type="submit">
        </div>
      </form>
    </body>
    </html>

     

    4. 컨트롤러 작성

    @GetMapping("/exUpload")
    public void exUpload() {
        log.info("----- exUpload -----");
    
    }
    
    @PostMapping("/exUploadPost")
    public void exUploadPost(ArrayList<MultipartFile> files) {
        files.forEach(file -> {
            log.info("------------------------------");
            log.info("name: " + file.getOriginalFilename());
            log.info("size: " + file.getSize());
        });
    }

    스프링 MVC는 전달되는 파라미터가 동일한 이름으로 여러 개 존재하면 배열로 처리할 수 있으므로 파라미터를 MultipartFiler 배열 타입으로 작성합니다.

     

    위와 같이 파일을 지정해서 업로드하면 정상적으로 log가 찍히는 것을 볼 수 있습니다. (최종 업로드는 처리하지 않았습니다.)

    반응형

    'Java > Spring' 카테고리의 다른 글

    [Spring boot] Maria DB 설정  (0) 2023.01.06
    [Spring MVC] 컨트롤러의 Exception 처리  (0) 2023.01.03
    [Spring MVC] Controller  (0) 2023.01.03
    [Spring MVC] 기본 구조  (0) 2023.01.02
    [Spring] MyBatis와 스프링 연동 (+log4jdbc)  (0) 2023.01.02

    댓글