준비 사항 : cos.jar 파일 WebContent/WEB-INF/lib 폴더에 복사
COS 라이브러리 : http://www.servlets.com/cos/
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file"> </form>
cos.jar 라이브러리를 통하여 Servlet에서 MultipartRequest 클래스를 제공
생성자
MultipartRequest multi = new MultipartRequest(request, saveDirectiory, maxPostSize, encoding, policy);
request : MultipartRequest와 연결할 request 객체
saveDirectory : 서버 측에 저장될 경로
maxPostSize : 최대 파일 크기
encoding : 파일의 인코딩 방식(파일 이름이 한글일 경우 매개 변수 값을 utf-8로 줌)
policy : 파일 중복 처리를 위한 매개 변수
policy는 중복 처리를 해주는 매개변수로서 'b.bmp' 파일을 업로드 하였는데 다시 같은 파일을 업로드 할 경우 'b1.bmp' 등으로 자동으로 파일 중복 처리를 해줌
매개 변수 값으로는 'new DefaultFileRenamePolicy()'를 사용 함
getparameterNames() : 폼에서 전송된 파라미터의 이름을 Enumeration 타입으로 리턴
getParameterValues() : 폼에서 전송된 파라미터들을 배열로 받아옴
getParameter() : 객체에 있는 해당 파라미터의 값을 가져옴
getFileNames() : 파일을 여러 개 업로드 할 경우 그 값들을 Enumeration 타입으로 리턴
getFilesystemName() : 서버에 실제로 업로드 된 파일의 이름을 의미
getOriginalFilename() : 클라이언트가 업로드한 파일의 원본 이름을 의미
getContentType() : 업로드 파일의 컨텐트 타입을 얻을 때 사용
getFile() : 서버에 업로드 된 파일의 정보를 객체로 얻어낼 때 사용
index.jsp
fileUploadPage.jsp
FileUploadServlet.java (/file/fileUpload.do)
MultipartRequest 객체를 만들려면 아래의 5개의 값이 있어야한다.
1) request 객체(Servlet에서 제공)
2) 실제 업로드 되어야하는 경로 세팅(filePath)
3) 최대 파일 사이즈 크기 설정 값
4) 파일 이름에 대한 인코딩 처리 값
5) 정책 관련된 객체(동일 이름의 파일이 업로드 되면 어떻게 처리할 것인가에 대한 정책 관련 객체)
MultipartReqeust 객체를 생성
파일 크기 검증
DB에 데이터 저장하기 위한 정보 세팅
1) 원본 파일 이름 가져오기
String originalFileName= multi.getFilesystemName("file");
2) 업로드 유저명
String fileUser= ((Member)request.getSession().getAttribute("member")).getUserId();
3) 업로드 시간(Calendar Class)
long currentTime =Calendar.getInstance().getTimeInMillis();
4) 포맷을 지정하여 업로드 시간 구현(import java.sql.Timestamp;)
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Timestamp uploadTime = Timestamp.valueOf(formatter.format(currentTime));
5) 파일 이름 변경 후 변경된 파일 이름 저장(import java.io.File;)
File file = new File(uploadFilePath+"\"+originalFileName);
file.renameTo(new File(uploadFilePath+"\"+fileUser+""+currentTime+"_kh"));
파일의 이름을 유저명업로드시간(밀리세컨드)kh 라는 이름으로 변경하겠다는 의미
String changedFileName= fileUser+""+currentTime+"_kh";
6) 해당 파일의 경로 저장(변경된 파일 이름)
String filePath=uploadFilePath+"\"+changedFileName;
7) 파일의 사이즈(파일 사이즈가 클 수 있으므로, long type 사용)
File reFile=new File(filePath);
long fileSize= reFile.length();