파일 업로드란?
: 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것.
- 파일 전송을 위해 JSP 페이지에 폼 태그를 사용한다.
- 전송된 파일 서버에 저장하기 위해 오픈 라이브러리를 이용한다.
"파일 업로드를 위한 폼 태그 이용 시 규칙"
1) form 태그의 method 속성은 반드시 POST 방식으로 설정한다.
2) form 태그의 enctype 속성은 반드시 multipart/form-data로 설정한다. // encoded type
3) form 태그의 action 속성은 파일 업로드를 처리할 JSP 파일로 설정한다.
4) input 태그의 type 속성을 file로 설정한다.
** 여러 파일을 업로드 하기위해서는 input 태그를 여러 개 사용하고, name 속성에 다른 값을 넣는다.
// 아래 코드와 같은 기본 구조를 가진다.
<form enctype="multipart/for-data" action="process.jsp">
<input type="file" name="file1">
<input type="file" name="file2">
<input type="submit" value="submit" >
</form>
업로드 처리 방법
: 단순 자바 코드로 작성하여 처리할 수 없기 때문에 오픈 라이브러리인 cos.jar이나 commons-fileupload.jar를 사용한다.
1) MultipartRequest 이용
- 웹 페이지에서 서버로 업로드되는 파일 자체만을 다룬다.
- 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근한다.
- 한글 인코딩 값을 얻기 쉽고, 서버의 파일 저장 폴더에 동일한 파일명이 있으면 자동 변경된다.
- jsp 페이지에 page 디렉티브 태그에서 import 속성을 사용하여 com.oreilly.servlet.*를 불러온다.
2) 아파치 API 사용
- 파일 업로드 패키지
- jsp페이지에 page 디렉티브 태그에서 import 속성을 사용하여 org.apache.commons.fileupload.*를 불러온다.
① MultipartRequest
다음과 같은 구조를 가진다.
MultipartRequest(javax.servlet.http.HttpServletRequest request,
java.lang.String saveDirectory,
int maxPostSize, // 설정된 최대 바이트를 넘길 경우, IO Exception 발생
java.lang.String encoding
FileRenamePolicy policy // 파일명 중복될 경우, 파일 덮어쓰기 여부를 설정한다.
)
(MultipartRequest 클래스 메소드)
// 일반 데이터의 경우엔 getParameter() 메서드를 통해 값을 받지만, 파일의 경우엔 getFileNames() 메서드를 이용하여 데이터를 받는다.
- getContentType(String name) : String / 파일 유형 반환
- getParameter(String name) : String / 요청 파라미터 반환
- getParameterNames() : Enumeration / 요청 파라미터 이름 반환
- getFile(String name) : File / 파일 객체 반환
- getFileNames() : Enumeration / 파일 이름 반환
- getFilesystemNames(String name) : String / 서버에 업로드된(시스템 상의) 파일명 반환
- getOriginalFileName(String name) : String / 사용자가 업로드한 파일명 반환
② Commons-FileUpload
(DiskFileUpload 클래스 메소드)
- setRepositoryPath(String repositoryPath) : void / 업로드된 파일을 임시로 저장할 디렉터리 생성
- setSizeMax(long sizeMax) : void / 최대 파일 크기 설정
- setSizeThreshold(int sizeThreshold) : void / 메모리상에 저장할 최대 크기 설정
- parseRequest(HttpServletRequest request) : List<FileItem> / multipart/form-data 유형 데이터 반환
(FileItem 클래스 메소드)
- isFormField() : boolean / 요청 파라미터가 일반 데이터일 경우 true, 파일인 경우 false
- getFieldName() : String / 요청 파라미터의 이름 반환
- getString() : String / 기본 문자로 인코딩한 요청 파라미터 값 반환
- getString(String encoding) : String / 설정한 문자로 인코딩한 요청 파라미터 값 반환
- getName() : String / 파일 이름 반환
- getSize() : long / 파일 크기 반환
- get() : byte[] / 파일을 바이트 배열로 반환
- isInMemory() : boolean / 메모리에 저장된 상태일 경우 true, 임시 디렉터리에 저장된 경우 false
- delete() : void / 파일 삭제
- write() : void / 파일 저장
filename = filename.substring(filename.lastIndexOf("\\"+1);을 하는 이유?
>> 파일 이름에서 \\ 까지 자른 자르고, +1 한 문자열부터 가져오기 위해서 +1을 하는 것이다.
'Backend > JSP' 카테고리의 다른 글
[JSP] JSTL fmt 태그 사용 시 properties 파일 생성 (0) | 2020.11.02 |
---|---|
[JSP] 유효성 검사 (0) | 2020.11.02 |
[JSP] common-fileupload 상세설명과 substring을 하는 이유 (0) | 2020.10.18 |
[JSP] MultipartRequest 이유 모르는 에러 해결 (0) | 2020.10.17 |
[JSP] 액션 태그 (0) | 2020.09.29 |
댓글