Skip to content

spring 파일업로드 #
Find similar titles

Structured data

Category
Programming

파일업로드 #

  • 오픈소스 애플리케이션 프레임워크인 스프링 프레임워크의 내장객체(CommonsMultipartResolver)를 이용한 파일 업로드 방식을 알아보고 설정 방법 및 예제에 대한 방법이다.

SPRING/파일업로드 적용방법 #

pom.xml 설정 #

 <!-- MultipartHttpServletRequset -->
<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>
</dependencies>
  • maven build를 위해 pom.xml 파일에 commons-fileupload.jar,commons-io.jar 파일을 추가한다.

spring-context.xml 설정(spring bean설정) #

<!-- MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000000"/>  <!-- 10MB-->
    <property name="maxInMemorySize" value="100000000"/> <!-- 10MB-->
</bean>
  • CommonsMultipartResolver는 스프링 프레임워크에 내장되어있다.
  • property -> maxUploadSize : 파일 업로드 시 최대 올릴 수 있는 파일 사이즈
  • property -> maxInMemorySize : 적용된 경로에 최대로 저장할 수 있는 파일 사이즈

jsp 설정(화면) #

<!-- form enctype="multipart/form-data"를 적어줘야 한다. -->
<form method="post" action="<c:url value='/regFile'/>"                         enctype="multipart/form-data">
    <!-- input type="file" 이라고 꼭 저어줘야 함 -->
    <input type="file" class="form-control" id="uploadFile"          
    name="uploadFile" />
    <button type="submit" class="btn btn-default">저장</button>
    <button type="list" class="btn btn-default">목록</button>
</form>
  • form 태그의 enctype을 multipart/form-data로 설정해줘야 파일업로드 기능이 적용된다.
  • INPUT 값에 대한 타입은 file로 적용해야한다.

java 설정(서버) - 준비 #

public class UtilFile {
    String fileName = "";

    //  fileUpload() 메소드에서 전체 경로를 DB에 경로 그대로 저장 한다.  
    public String fileUpload(MultipartHttpServletRequest request,
    MultipartFile uploadFile,      Object obj) {
        String path = "";
        String fileName = "";

        OutputStream out = null;
        PrintWriter printWriter = null;

        try {
            fileName = uploadFile.getOriginalFilename();
            byte[] bytes = uploadFile.getBytes();
            path  = getServletContext().getRealPath("/") +                                          "files/;

            File file = new File(path);

            // 파일명이 중복체크
            if (fileName != null && !fileName.equals("")) {
                if (file.exists()) {
            // 파일명 앞에 구분(예)업로드 시간 초 단위)을 주어 파일명 중복을 방지한다.
                fileName = System.currentTimeMillis() + "_" + fileName;
                file = new File(path + fileName);
                }
            }
            out = new FileOutputStream(file);

            out.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (printWriter != null) {
                    printWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return path + fileName;
    }
  • 업로드한 파일의 경로가 도메인 별로 달라지기 때문에 파일 저장 정로를 다르게 지정해야 한다.

java 설정(서버) - 적용 #

@Controller
public class RewardController {
    // 파일을 업로드하는 컨트롤러 클래스 메소드
    @RequestMapping(value = "re/add", method = RequestMethod.POST)
    // 인자로 MulfiPartFile 객체,
    MultipartHttpServletRequest 객체, 업로드 하려는 도메인 클래스를 받는다

    public String reAddProCtrl(@RequestParam("uploadFile")                                  MultipartFile uploadFile, MultipartHttpServletRequest request, Reward reward) {
    //UtilFile 객체 생성
    UtilFile utilFile = new UtilFile();
    //파일 업로드 결과값을 path로 받아온다
    String uploadPath=utilFile.fileUpload(request,uploadFile,                     
    reward);

     // 해당 경로만 받아 db에 저장한다.
     int n = rewardService.reAddServ(uploadPath, reward);
     return "isg/Boardlist";
    }
}

참고문헌 #

관련 페이지 #

Spring

0.0.1_20140628_0