목차

File Upload/Download 서비스

1. 개요

전자정부 프레임워크에서는 다양한 파일 업로드 API를 제공하는 Commons FileUpload를 오픈 소스로 채택하였다.

Spring 에서는 Commons FileUpload 를 사용하여 싱글 파일 업로드에 대하여 가이드 하고 있다.

현재 Spring에서 싱글 파일 업로드에 대해서 매우 좋은 api를 제공해주고 있으나 멀티플 파일 업로드시에 동일한 이름의 여러개의 파일을 올리려고 할 때 오류가 발생한다.

오류 사항에 대해서는 multipart multi file upload 지원 문제를 참고하기 바란다.

본 메뉴얼에서는 싱글 파일 업로드 보다 멀티플 파일 업로드를 가능하도록 그 대안에 대하여 설명하고자 한다.

2. 설명

데이터 전송방식

데이터를 전송하는 방식에는 GET방식과 POST방식이 있고 또하나 ENCTYPE속성의 "multipart/form-data" 있다.

* GET방식  
URL에 폼데이터가 노출되기때문에 입력내용의 길이제한이있고 256byte~4096byte 까지의 데이터를 전송할 수 있다. 

* POST 방식
URL에 노출되지않고 데이터를 전송하기 때문에 입력내용의 길이에 제한을 받지 않는다. 
이렇게 데이터를 전송하는데 아무문제없을것처럼 보이니지만 이둘은 보낼수있는 데이터양의 한계가 있다.
파일이나 용량이큰 데이터를 전송할때 문제가 생기는 것이다.

그때 쓰는 폼 데이터 전송방식이  바로 ENCTYPE 속성의 "multipart/form-data" 이다.

EgovFrameWork에서는 스프링에서 제공하는 Apache Commens FileUpload API를 이용하여 파일 업로드를 처리하는 CommonsMultipartResolver 클래스를 제공하고 다음과 같이 설정파일에 CommonsMultipartResolver를 빈으로 등록하여 준다.

Apache Commens FileUpload 에서 싱글 파일 업로드에 대해서 매우 좋은 api를 제공해주고 있다. 하지만 멀티플 파일 업로드시 동일한 이름의 여러개의 파일을 올리려고 할 때 오류가 발생한다.

여러개의 파일을 올리려고 할 때 오류가 발생하는 문제에 대해서는 multipart multi file upload 지원 문제를 참고하기 바란다.

Spring 에서 multipart를 사용한 파일 업로드에 대해서는Spring's multipart (fileupload) support 에서 자세하게 가이드 하였으므로 본 메뉴얼에서는 다루지 않는다.

기능 실행에 대한 이해를 돕기 위해 컨텐츠와 함께 컨텐츠에서 제시한 샘플 코드를 포함하고 있는 이클립스 프로젝트 형태의 웹 애플리케이션 샘플 프로젝트를 다운로드할 수 있다.

File Upload / Download

File Upload / Download 에 대한 설명은 아래 상세 페이지를 참고하라.

예제 Sample 실행

  1. utilappSample.zip(utilappsample.zip) 파일을 다운로드 받는다.
  2. 이클립스에서 다운로드 받은 폴더를 선택하여 프로젝트를 Import 한다.
  3. lib에 라이브러리 파일이 있는지 확인한다.
  4. src 폴더 아래에 Index.jsp를 선택하여 마우스 오른쪽 클릭하여 Run As > Run On Server를 실행한다.
  5. Console 창에서 정상적으로 Tomcat이 실행된 것을 확인한다.
  6. 본 샘플에서는 CommonsMultipartResolver를 보완한 MultiCommonsMultipartResolver를 사용하고 있으나 CommonsMultipartResolver 사용을 권장한다.

multiple files with a single file(한단 샘플)에서 사용한 JavaScript를 사용하여 추가시 다른 form name을 추가하여 처리하는 방식을 가이드 하였으니 참고하기 바란다.

샘플 utilappSample의 Index.jsp 실행하였을 경우 브라우져에서 실행되는 화면

N. 참고자료

- Spring's multipart (fileupload) support {mvc-multipart}

- Spring's multipart (fileupload) support {CommonsMultipartResolver.html}

- Spring's multipart (fileupload) support {RequestFacade}

- Spring's multipart (fileupload) support {MultipartHttpServletRequest}

- Spring's multipart (fileupload) support {CommonsFileUploadSupport}

- Spring's multipart (fileupload) support {CommonsFileUploadSupport}

- Spring's multipart (fileupload) support {parseFileItems}

- commons.apache.org {fileupload}

- commons.apache.org{empty-parse}