JSP

업로드된 파일 서버 전송 처리

Song hyun 2024. 8. 1. 11:41
728x90
반응형

1. 파일 유효성 검사

// 유효성 검사
		if(filePart==null || filePart.getSize()==0) { // 파일 전송 x 확인
			response.setContentType("text/html");
			response.getWriter().println("첨부 파일을 추가해주세요!");
			return;
		}

 

 

2. 파일 원본 이름 가져오기

// 사용자가 올린 파일 원본 이름을 가져온다.
		// String originFileName=filePart.getSubmittedFileName();
		String originFileName=Paths.get(filePart.getSubmittedFileName()).toString();
		System.out.println("originFileName : "+originFileName);

 

 

3. 고유한 파일명 추출 + 확장자 앞에 넣기

// 1. 원본 파일명을 가져온다.
		// 2. 가능한 절대 중복되지 않을 이름을 만들어준다. -> 어떻게?!
		// UUID를 통해서 고유한 파일명을 만들어보자!
		// 3. 확장자를 분리해서 원본 파일명 + _ + 고유한 UUID를 생성해서
		// 새로운 파일명을 만들어준다.
		String uniqueFileName=UUID.randomUUID().toString();
		
		// a.png, b.jpeg ==> a_ngdfg.png
		// 파일 확장자를 추출하여, 고유한 파일명 뒤에 추가한다.
		String extension = "";
		int i=originFileName.lastIndexOf(".");
		System.out.println("UNIQUE : "+uniqueFileName);
		System.out.println(". 인덱스 번호 : "+i);
		if(i>0) {
			// . 포함한 확장자를 추출한다.
			extension = originFileName.substring(i);
			System.out.println("extension : "+extension);
		}
		
		uniqueFileName+=extension;
		System.out.println(uniqueFileName);

 

 

4. 파일 저장 경로 설정하기

// 4. 어디에 저장할지 경로를 설정해야 한다.
		// C:\workweb\jsp_file_upload\src\main\images
		File uploadDirFile = new File("C:\\workweb\\jsp_file_upload\\src\\main\\images");
		
		// 5. 해당 경로에 폴더가 존재하는지 확인 -> 없다면 폴더를 코드로 생성
		// exist-> 존재할 시 true 반환, 없으면 false 반환
		if(!uploadDirFile.exists()) {
			// 없으면 생성
			// mkdir()과 mkdirs()의 차이= 부모 폴더가 없으면 함께 생성해!
			if(uploadDirFile.mkdirs()) {
				System.out.println("디렉토리가 생성되었습니다. "+uploadDirFile);
			} else {
				throw new ServletException("디렉토리 생성에 실패했습니다.");
			}
		}

 

 

5. 전송받은 파일을 해당 폴더(4번)에 생성하기(서버에 저장)

// 6. 파일 생성하기
		File fileToSave = new File(uploadDirFile,uniqueFileName);
		System.out.println("fileToSave.getAbsolutePath() : "+fileToSave.getAbsolutePath());
		// 7. 파일을 서버에 저장하기
		filePart.write(fileToSave.getAbsolutePath());

 

 

6. 파일 전송 시 응답 구성

// 8. 응답 페이지 구성
		response.setContentType("text/html");
		response.getWriter().print("파일 업로드에 성공!");
		response.getWriter().print("<br>");
		response.getWriter().print("사용자가 올린 파일명 : "+originFileName);
		response.getWriter().print("<br>");
		response.getWriter().print("서버에 저장된 파일명 : "+uniqueFileName);
728x90
반응형