[ITWILL : JSP]Javabean 11 : MultipartRequest클래스
ITWILL학원 : 31강 JSP기초 BY 정규태강사
- MultipartRequest클래스 (p305)
MultipartRequest 클래스의 생성자와 메소드들을 사용하여 파일 업로드 기능 구현
1. 라이브러리 설치
- servlets페이지 방문.
- 왼쪽 카테고리
COS File Upload Library
클릭 하여com.oreilly.servlet
로 이동. - 맨 하단에
Download
에서Version
밑에 zip압축파일 다운로드. lib
폴더 안의cos.jar
복사하여프로젝트의 WebContent\WEB-INF\lib
에 붙여넣기.
2. fwriteForm.jsp 작성
- cos.jar라이브러리설치 (위에 내용 참고)
- 폼태그속성 enctype=”multipart/form-data”, method=”post”
- get방식은 처리되지 않음.
- enctype속성때문에
- 참고링크 : 속성종류 3가지
- D드라이브에 `upfile’ 폴더생성
- D드라이브말고 원하는 경로 지정가능.
1 | <% |
3. fwritePro.jsp 작성
파일업로드구현
- 파일 업로드 => cos.jar (MultipartRequest 클래스)
- 파일이 저장되는 위치 (D:/upfile)
- 파일 업로드 최대 크기
- 크기를 왜 지정해야할까? 그 전에 파일을 업로드하면 어디로 저장되는지 알아야한다
- 서버의 upfile폴더안으로 들어간다.
- 따라서 유한한 디스크이고 메모리라서 최대 크기 지정이 필수이다.
- 보통 20~250MB이다.
- 1MB = 1024바이트 * 1024바이트 계산 꼭 하기
- MultipartRequest생성 : import하기 (다운받았던 cos.jar라이브러리)
- 아래 코드처럼 객채생성하면 에러메세지가 뜬다
1
MultipartRequest multi = new MultipartRequest();
- The constructor MultipartRequest() is undefined 기본생성자가 없는 클래스이다
- 따라서 아래처럼 괄호안에 오버로딩되는 생성자를 작성해야한다.
- MultipartRequest(요청정보,파일 업로드할 폴더,파일 업로드 제한 크기,인코딩방식,파일 이름동일시 처리객체)
1
MultipartRequest multi = new MultipartRequest(request, savePath, maxSize, "UTF-8", new DefaultFileRenamePolicy());
new DefaultFileRenamePolicy
객체의 역할 : 우리가 동일한 파일을 다운로드받는 경우 파일명에 파일명(1), 파일명(2)등등 자동으로 구분할 수 있도록 rename해주는 역할을 한다. 즉 중복처리하는 객체.
- 아래 코드처럼 객채생성하면 에러메세지가 뜬다
1 | <% |
- 테스트하면 만들었던 upfile폴더안에 저장되어있다. 성!공!적!
- 하지만 이 방법은 보안상 매우 위험하다
- 누구나 주소를 입력하여 upfile폴더에 접근가능하기때문이다.
- 이제 디비와 연결해보자.
4. 디비연결
위의 코드에서 아래 코드를 더 추가해야한다.
- multi객체 안에 request가 있으므로
request.getParameter()
가 아닌multi.getParameter()
로 가지고 와야한다.
1 | //6. 파일의 정보 + 글 정보를 디비에 저장 |
DB에도 잘 들어가는 걸 확인할 수 있다.
동일한 페이지 두번 작성하면 upfile에 저장된 파일명은 자동적으로 뒤에 숫자가 붙어 고유한 파일명으로 업로드가능하다.