파일 업로드 구현 방법
Servlet의 기본 Part 인터페이스 활용 방법
- Servlet 3.0 이상의 기본 파일 업로드 인터페이스(JDK7이상 지원)
- Servlet 5.0 이상(Tomcat 10)에서는 Jakarta.servlet으로 변경된 패키지명 사용 필요
- 업로드된 파일명에 대해 중복 회피 방법 등의 Servlet 프로그램 개발과 Server 설정 필요
Apache Project의 Commons FileUpload 라이브러리 활용
- Commons 라이브러리의 FileUpload(v1.5)와 IO(v2.16.x)를 사용하여 서블릿 Inputstream 제어
- Servlet 2.3 이상, JDK5 이상 지원
- 파일 업로드 상태표시가 가능하며, Spring 프레임워크에서는 기본 내장되어 있음
- 업로드된 파일명에 대한 중복 회피 방법 등의 Servlet 프로그램 개발과 Server 설정 필요
Oreilly사의 COS File Upload 라이브러리(cos.jar) 활용(무료)
- Servlet 2.4~4.x, Java 5(JDK5) 이상 지원(단, Servlet 5.0 이상(Tomcat 10이상) 미지원)
- MultipartRequest와 MultipartParser 클래스 패키지 사용
- 업로드 파일명 중복 회피 및 업로드간 예외처리 지원, 별도의 Servlet 프로그램 개발과 Server 설정 필요 없음.
Part Interface
- Servlet 5.x(Tomcat 10.x) 버전 이후, 패키지명 변경됨(Part API는 Servlet 3.0 이후부터 사용가능)
- javax.servlet.http.* -> jakarta.servlet.http.*
Method | Description |
void delete() throws IOException | 임시 저장된 파일 데이터를 삭제. HTTP 요청이 처리되고 나면 자동으로 제거되지만 그 전에 메모리나 디스크 자원을 아끼고 싶다면 수동으로 제거할 수 있음. |
String getContentType() | Content-Type을 얻어냄 |
String getHeader(String name) | Part로부터 지정한 name 헤더값을 반환 |
Collection<String> getHeaderNames() | 현재 Part의 헤더 이름을 반환 |
Collection<String> getHeaders(String name) | 주어진 name를 가지는 Part 헤더의 값을 반환 |
InputStream getInputStream() throws IOException | Part에 대한 InputStream을 반환. 직접 데이터를 추출할 때 사용. |
String getName() | Part의 파라미터명을 반환 |
long getSize() | 파일의 크기를 byte단위로 변환 |
String getSubmittedFileName() | 업로드한 파일명을 반환. Servlet 3.1부터 사용 |
void write(String fileName) throws IOException | 임시 저장되어 있는 파일 데이터를 복사하여 fileName에 지정한 경로로 저장. 임시 저장 되어있는 파일데이터가 메모리상에 있는 디스크에 있든 신경 쓰지 않아도 됨. |
파일 업로드 환경설정
톰켓 서버의 server.xml 환경 설정(최대 전송시간, 최대 전송크기)
- <Connector port="8080">인 요소에서 Connection 유지시간과 POST 방식의 전송 가능한 최대 파일 크기를 설정한다.
- connectionTimeout="20000" // 20초 → 기다리는 시간. 일정 시간을 어느정도 설정해야 큰 data를 처리할 수 있다.
- maxPostSize="10485760" // 10MB → Tomcat의 POST 방식은 기본 2MB이다.
프로젝트의 context.xml 파일 생성 또는 수정
- 프로젝트 webapp의 META-INF 디렉토리에 context.xml을 새로 생성하거나, 기존 설정에 추가(파일명과 속성명 대소문자 주의)
- Multipart 업로드를 허용하기 위한 환경 설정
※ Context Attributes
속성 | 설명 |
allowCasualMultipartParsing | - true일 경우, 서블릿에 @MultipartConfig 주석을 표시하지 않더라도 HttpServletRequest.getPart* 또는 HttpServletRequest.getParameter*를 호출하여 Tomcat이 multipart/form-data 요청을 자동으로 분석 처리함. - 기본값은 false임. ▷ true로 설정하면, @MultipartConfig을 설정하지 않더라도 자동으로 분석 처리해준다. |
swallowAbortedUploads | - false일 경우, Tomcat이 중단된 업로드에 대하여 추가 요청하지 않고, 클라이언트 연결을 종료한다(maxPostSize보다 파일이 큰 경우. Multipart 업로드 크기 제한에 도달한 경우). - 기본값은 true임(업로드 중단되더라도 추가 데이터 요청함). ▷ 디버깅 환경에서는 false로 설정하여 다시 요청하는 것을 방지할 수 있다. |
※ UUID(Universal Unique Identifier, 범용 고유 식별자)
- 네트워크상의 개체(정보)들을 구별하기 위한 식별자
- 32개의 16진수 문자와 4개의 하이픈(-)으로 표현됨.
- 128bit, 약 3.4x10^38개 사용 가능
- java에서는 java.util.UUI 패키지에서 표준 UUID를 지원한다.
'대학 강의 > 인터넷 프로그래밍' 카테고리의 다른 글
JSP와 JDBC Basic (0) | 2025.06.01 |
---|---|
JSP 개요 (0) | 2025.05.04 |
JavaScript Overview (0) | 2025.04.02 |
인터넷 프로그래밍 개요 (0) | 2025.03.24 |
CSS3 (0) | 2025.03.23 |