본문 바로가기
Back_end/JSP

JSP - 파일 업로드

by hyeon1016 2024. 10. 28.

파일 업로드

웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것을 말한다.
*텍스트 파일, 바이너리 파일(exe), 이미지 파일, 문서 등 다양한 유형의 파일을 서버로 업로드할 수 있다.

 

 

파일 업로드 (JSP)

<form action="경로" method="post" enctype="multipart/form-data">
    <input type="file"  name="요청 파라미터 이름" />
</form>

 

조건

1. method는 반드시 post방식으로 지정돼야 함
2. enctype은 반드시 multipart/form-data로 설정해야 함
3. input의 type은 반드시 file 이여야 함

 

 

파일 업로드 처리 방법

파일을 업로드하면 서버는 요청 파라미터를 분석하여 파일을 찾아 지정된 경로에 파일을 저장한다.
이러한 파일 업로드 처리는 오픈 라이브러리 cos.jar 또는 commonsfileupload.jar을 사용해야 한다.

 

 

MultipartRequest 클래스를 이용한 파일 업로드

객체 생성

request.getServletContext().getRealPath("파일 저장 경로");

 

request.getServletContext().getRealPath("파일 저장 경로"); 를 사용해 경로를 미리 생성해 두자

 

MultipartRequest multi = new MultipartRequest(request, 
                 save, 
                 5*1024*1024, 
                 "utf-8", 
                 new DefaultFileRenamePolicy()
         );

 

MultipartRequest 객체를 생성할 때 생성자의 매개변수로 다섯 가지가 존재하며 반드시 포함시켜야 한다.

매개변수 설명
request request 내장 객체를 설정
saveDirectory 서버의 파일 저장 경로(디렉터리)
maxPostSize 파일의 최대 크기 /5MB(5*1024*1024)
encoding 인코딩 유형(UTF-8)
policy saveDirectory의 파일명이 중복된 경우 덮어쓰기 여부를 결정(DefaultFileRenamePolicy클래스를 
사용하면 중복된 파일명 뒤에 숫자를 붙여 파일명이 중복되지 않게 한다.)

 

 

메서드

메서드 반환 타입 설명
getContentType(String name) String 업로드된 파일의 콘텐츠 유형을 반환한다. 
파일이 없다면 null반환
getParameter(String name) String 요청 파라미터의 name의 value를 받는다.
getParameterNames() java.util.Enumeration 요청 파라미터의 이름을 Enumeration 객체 타입으로 받는다.
getFile(String name) java.io.File 서버에 업로드된 파일에 대한 File 객체를 받는다. 
없다면 null 반환
getFileNames() java.util.Enumeration type 속성이 file인 요청 파라미터의 이름을 받는다.
파일이 여러개 일때 사용한다.
getFilesystemName(String name) String 서버에 저장된 파일의 이름을 받는다.
getOriginalFileName(String name) String 서버에 저장되기 전의 파일 이름을 받는다.

 

 

 

Commons-FileUpload를 이용한 파일 업로드

Commons-FileUpload패키지를 사용해 웹 브라우저에서 서버로 파일을 업로드하기 위해서는 
오픈 라이브러리 commons-fileupload.jar, commons-io.jar를 설치해야한다 

 

순서

1. DiskFileUpload 객체를 생성
2. DiskFileUpload 클래스의 제공 메서드를 사용해 웹 브라우저에서 전송된 multipart/form-data 유형의 요청 파라미터를 가져온다.
3. FileItem 클래스의 메서드를 사용해 요청 파라미터를 일반 데이터와 파일로 구분하여 업로드한다.

 

사용 방법

String fileUploadPath = request.getServletContext().getRealPath("경로"); //파일이 업로드될 실제 경로

DiskFileUpload upload = new DiskFileUpload(); 

List items = upload.parseRequest(request);

Iterator params = items.iterator();

while(params.hasNext()){
   FileItem item = (FileItem) params.next();
   if(item.isFormField()){     (//tem이 일반 폼 필드(text)인지 확인
      String title = item.getString("UTF-8");  //폼 필드의 값을 UTF-8 인코딩으로 가져옴
      out.print(title);   
   } else {
      String fileName = item.getName();  //업로드된 파일의 원래 이름을 가져온다.
      fileName = fileName.substring(fileName.lastIndexOf("\\")+1);  //파일 경로에서 실제 파일 이름만 추출
      File file = new File(fileUploadPath+"/"+fileName); //File객체 생성(업로드될 파일의 최종 위치)
      item.write(file); //업로드된 파일의 내용을 지정된 위치에 작성
      out.print(fileName);
   }
}

 

 

DiskFileUpload 클래스의 메서드

메서드 반환 타입 설명
parseRequest(HttpServletRequest request) List<FileItem> multipart/form-data 유형의 요청 파라미터를 가져온다.
setRepositoryPath(String repositoryPath) void 업로드된 파일의 임시 저장 디렉터리를 설정한다.
setSizeMax(long size) void 최대 파일의 크기를 설정한다.
setSizeThreshold(int sizeThreshold) void 메모리상에 저장할 최대 크기를 설정한다.

 

 

FileItem 클래스의 메서드

메서드 반환 타입 설명
isFormField() boolean 요청 파라미터가 파일이 아닌 일반 데이터(text)인 경우 true 반환
getFieldName() String 요청 파라미터의 이름을 반환
getString() String 기본 문자 인코딩을 사용해 요청 파라미터의 값을 가져옴
getString(String encoding) String 요청 파라미터의 값을 설정한 인코딩으로 가져온다.
getName() String 업로드된 파일의 이름을 가져온다.
getSize() long 업로드된 파일의 크기를 가져온다.
get() byte[] 업로드된 파일을 바이트 배열로 가져온다.
isInMemory() boolean 업로드된 파일이 메모리에 저장되었다면 true, 임시 디렉터리에 저장되 있으면 
false 반환
delete() void 메모리 또는 임시 디렉터리의 파일을 제거
write(File file) void 업로드된 파일을 지정한 경로에 저장한다.
getContentType() String 웹 브라우저가 전송하는 콘텐츠 유형을 반환, 정의되어 있지 않은 경우 null 반환

 

'Back_end > JSP' 카테고리의 다른 글

JSP - 다국어 처리  (2) 2024.10.28
JSP - 유효성 검사  (2) 2024.10.28
JSP - 폼(FORM)  (1) 2024.10.28
JSP - 내장 객체  (1) 2024.10.28
JSP - 액션 태그  (1) 2024.10.28