
회원 정보 수정 다이어그램.drawio
MemberController
// 프로필 사진 업로드
@ResponseBody
@RequestMapping(value = "/memberProfileImageUpload.do", method = RequestMethod.POST, produces = "application/json; charset=utf8")
public String memberProfileImageLoad(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request,
HttpSession session) throws Exception {
// 아이디 가져오기
// 세션에서 아이디 가져오기
MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
String memberId = memberDomain.getMemberId();
System.out.println("memberId야 들어왔니? " + memberId);
JsonObject jsonObject = new JsonObject();
// String fileRoot = request.getSession().getServletContext().getRealPath("/resources/images/board/"); // 내부경로 저장
String fileRoot = "C:\\\\gami\\\\memberProfileImage\\\\" + memberId + "\\\\"; // 외부 경로 저장
String originalFileName = multipartFile.getOriginalFilename(); // 원래 파일명
System.out.println(originalFileName);
String extension = originalFileName.substring(originalFileName.lastIndexOf(".")); // 파일 확장자 확인
System.out.println(extension);
if (!Arrays.asList(ALLOW_EXTENSION).contains(extension)) {
jsonObject.addProperty("responseCode", "extension");
String check = jsonObject.toString();
System.out.println(check);
return check;
}
String savedFileName = UUID.randomUUID() + extension; // 파일 이름 새로 부여 : UUID
File targetFile = new File(fileRoot + savedFileName);
try {
InputStream fileStream = multipartFile.getInputStream();
FileUtils.copyInputStreamToFile(fileStream, targetFile);
// 파일 저장
// jsonObject.addProperty("url", fileRoot + savedFileName); // contextroot + resources + 저장할 내부 폴더명
System.out.println(fileRoot + savedFileName);
System.out.println("떠라 제발 : " + memberId + savedFileName);
jsonObject.addProperty("fileName", "\\\\" + memberId + "\\\\" + savedFileName); // 톰켓 서버.xml에서 경로 설정해줬기에 게시글
// 번호 폴더명과 파일명을 같이 넘겨야함.
jsonObject.addProperty("responseCode", "success");
jsonObject.addProperty("fileName", savedFileName);
} catch (IOException e) {
FileUtils.deleteQuietly(targetFile); // 업로드 실패 시 하위 파일 및 폴더 삭제
jsonObject.addProperty("responseCode", "error");
e.printStackTrace();
}
String check = jsonObject.toString();
return check;
}
// 회원 정보 수정
// 맵으로 받는 걸로 수정할까?
@RequestMapping(value = "/memberUpdate.do", method = RequestMethod.POST)
public ResponseEntity memberUpdate(@RequestParam("memberNickName") String memberNickName,
@RequestParam("memberEmail1") String memberEmail1, @RequestParam("memberEmail2") String memberEmail2,
@RequestParam("memberPhone1") String memberPhone1, @RequestParam("memberPhone2") String memberPhone2,
@RequestParam("memberPhone3") String memberPhone3, @RequestParam("memberZip1") String memberZip1,
@RequestParam("memberZip2") String memberZip2, @RequestParam("memberZip3") String memberZip3,
@RequestParam("memberImage") String memberImage,HttpServletRequest request) throws Exception{
// 들어왔나 확인.
System.out.println("수정 memberNickName 들어왔니? " + memberNickName);
System.out.println("수정 memberEmail1 들어왔니? " + memberEmail1);
System.out.println("수정 memberEmail2 들어왔니? " + memberEmail2);
System.out.println("수정 memberPhone1 들어왔니? " + memberPhone1);
System.out.println("수정 memberPhone2 들어왔니? " + memberPhone2);
System.out.println("수정 memberPhone3 들어왔니? " + memberPhone3);
System.out.println("수정 memberZip1 들어왔니? " + memberZip1);
System.out.println("수정 memberZip2 들어왔니? " + memberZip2);
System.out.println("수정 memberZip3 들어왔니? " + memberZip3);
System.out.println("수정 memberImage 들어왔니? " + memberImage);
memberDomain.setMemberNickname(memberNickName);
memberDomain.setMemberEmail1(memberEmail1);
memberDomain.setMemberEmail2(memberEmail2);
memberDomain.setMemberPhone1(memberPhone1);
memberDomain.setMemberPhone2(memberPhone2);
memberDomain.setMemberPhone3(memberPhone3);
memberDomain.setMemberZip1(memberZip1);
memberDomain.setMemberZip2(memberZip2);
memberDomain.setMemberZip3(memberZip3);
if(memberImage!="") {
memberDomain.setMemberImage(memberImage);
}
System.out.println("일로 왔니? " + memberImage);
System.out.println("memberDomain.getMemberImage(); : " + memberDomain.getMemberImage());
try {
memberService.updateMember(memberDomain);
if(memberImage!="") {
String imageRoot = "C:\\\\gami\\\\memberProfileImage\\\\" + memberDomain.getMemberId() + "\\\\";
System.out.println(imageRoot);
// 이미지 경로로 파일 객체 생성
File imageDir = new File(imageRoot);
// 이미지 파일 목록을 배열에 담음.
if (imageDir.exists()) {
String[] imageList = imageDir.list();
// for문을 돌려서 이미지 파일이 포함되었나 확인
for (String imageName : imageList) {
System.out.println(imageName);
boolean check = memberDomain.getMemberImage().equals(imageName);
System.out.println("이름이 같은지 : " + check);
// 폴더에 해당 파일이랑 다른 파일들은 삭제
if (!check) {
String filePath = imageRoot + imageName;
File fileToDelete = new File(filePath);
FileUtils.deleteQuietly(fileToDelete);
}
}
}
}
}catch(Exception e){
e.printStackTrace();
System.out.println("수정 및 파일 삭제 실패");
}
ResponseEntity res = null;
String msg = "<script>";
msg += " alert('회원 정보가 수정되었습니다.');";
msg += " location.href='" + request.getContextPath() + "/member/memberModifyForm.do'; ";
msg += " </script>";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
res = new ResponseEntity(msg, responseHeaders, HttpStatus.CREATED);
return res;
}
MemberServiceImpl
// 회원 정보 수정
@Override
public void updateMember(MemberDomain memberDomain) throws Exception {
memberDAO.updateMember(memberDomain);
}
MemberDAOImpl
@Override
public void updateMember(MemberDomain memberDomain) throws DataAccessException {
sqlSession.update("mapper.member.updateMember", memberDomain);
}
member.xml
<!-- 회원 정보 수정 -->
<update id="updateMember" parameterType="memberDomain">
<![CDATA[
UPDATE member
set memberPhone1= #{memberPhone1}, memberPhone2= #{memberPhone2},
memberPhone3= #{memberPhone3}, memberNickname= #{memberNickname},
memberEmail1= #{memberEmail1}, memberEmail2= #{memberEmail2},
memberZip1= #{memberZip1}, memberZip2= #{memberZip2},
memberZip3= #{memberZip3}, memberImage= #{memberImage},
memberUpdated = sysdate
where memberId= #{memberId}
]]>
</update>
memberModifyForm.jsp
//중복확인용 변수
var msg1; // document.getElement 쓰기 위함
var msg2; // document.getElement 쓰기 위함
var usable; // '사용가능' 문자 넣기 위함
var not_usable; // '사용불가능' 문자 넣기 위함
var de_check_requirement = new Array();
var check_requirement = new Array();
var result1 = "true"; // ajax - /member/nickNameCheck.do 메서드랑 연관있음 / 닉네임 상태
var InputMemberNameStatusCheck = true; // memberName 입력 상태
var InputEmail1StatusCheck = true; // email1 입력 상태
var InputEmail2StatusCheck = true; // email2 입력 상태
var InputPwdStatusCheck = true; // 비밀번호 입력 상태
var doubleCheckPwd = true; // 비밀번호확인 입력 상태
var checkZip = true; // 우편번호 입력 상태
//닉네임 중복확인 (실시간)
function nickNameCheck(){
var nickName = document.getElementsByName("memberNickName")[0].value;
msg1 = document.getElementById('nickMsg1');
msg2 = document.getElementById('nickMsg2');
if(nickName.length < 2 || nickName.length > 10){
msg1.innerText = '2 ~ 10 글자만 가능합니다.';
msg2.innerText = "";
result1 = "false";
} else{
$.ajax({
url: '${contextPath}/member/nickNameCheck.do',
method: 'post',
data: {'nickName':nickName},
dataType: 'json',
success: function(data){
result1 = data.result;
usable = '사용가능한 닉네임입니다.';
not_usable = '중복되는 닉네임입니다.';
if(result1 == "false"){
msg2.innerText = "";
msg1.innerText = not_usable;
result1 = "false";
}else{
msg1.innerText = "";
msg2.innerText = usable;
result1 = "true";
}
},error: function(data){
alert('error');
}
});
}
};
//입력란 기호에 안맞는 문자 입력 필터
function deInputKo(e){
if(!(e.keyCode >= 37 && e.keyCode <= 40)){
document.getElementById('emailMsg1').innerText = ""; // 재입력 시 경고 메시지 안뜨게
document.getElementById('emailMsg2').innerText = "";
var inputEmail = document.getElementsByName("memberEmail1")[0].value;
var inputEmail2 = document.getElementsByName("memberEmail2")[0].value;
var check = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; // 한글
var check1 = /[~!@#$%";'^,&*()_+|</>=>`?:{[\\}]/g; // 특수문자
var check2 = /\\s+/g; // 중간중간 공백 검사
// var check2 = /^\\s+|\\s+$/g // 얘는 문자 양쪽 끝만 확인
if(check.test(inputEmail) || check1.test(inputEmail) || check2.test(inputEmail)){
InputEmail1StatusCheck = false;
document.getElementById('emailMsg1').innerText = "영문/숫자만 입력해주세요.";
}
if(check.test(inputEmail2) || check2.test(inputEmail2)){
InputEmail2StatusCheck = false;
document.getElementById('emailMsg1').innerText = "공백 및 한글을 제외한 입력이 감지되었습니다.";
}
}
};
//이메일 도메인 선택/직접입력
function choiceEmail(value){
if(value === '직접입력'){
document.getElementsByName("memberEmail2")[0].value = "";
document.getElementsByName("memberEmail2")[0].disabled = false;
} else {
document.getElementsByName("memberEmail2")[0].value = value;
document.getElementsByName("memberEmail2")[0].disabled = true;
document.getElementById('emailMsg1').innerText = ""; // 도메인 선택했으면 경고메시지 초기화
document.getElementById('emailMsg2').innerText = "";
}
if(document.getElementsByName("memberEmail2")[0].value != ""){InputEmail2StatusCheck = true;}
else{InputEmail2StatusCheck = false;}
};
//우편번호 검색 API
function execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 도로명 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var fullRoadAddr = data.roadAddress; // 도로명 주소 변수
var extraRoadAddr = ''; // 도로명 조합형 주소 변수
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
extraRoadAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if(data.buildingName !== '' && data.apartment === 'Y'){
extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 도로명, 지번 조합형 주소가 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if(extraRoadAddr !== ''){
extraRoadAddr = ' (' + extraRoadAddr + ')';
}
// 도로명, 지번 주소의 유무에 따라 해당 조합형 주소를 추가한다.
if(fullRoadAddr !== ''){
fullRoadAddr += extraRoadAddr;
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('memberZip1').value = data.zonecode; //5자리 새우편번호 사용
document.getElementById('memberZip2').value = fullRoadAddr;
checkZip = true;
}
}).open();
};
// 최종 확인
function updateMember() {
const form = document.getElementsByTagName('form')[0];
form.onsubmit = function() {
if (InputEmail1StatusCheck && result1 == "true") {
alert('다 입력함');
return true;
} else {
alert('다시 확인');
var location;
var tagId;
// 입력 문제 있는 곳 가는거
if (!InputEmail1StatusCheck) {
tagId = document.getElementById('email');
tagId.scrollIntoView({ behavior: "smooth" });
} else if (!InputEmail2StatusCheck) {
tagId = document.getElementById('email');
tagId.scrollIntoView({ behavior: "smooth" });
} else if (!checkZip) {
tagId = document.getElementById('zip');
tagId.scrollIntoView({ behavior: "smooth" });
}
// 입력 문제 있는거 * 표시 해주는거
if (!InputEmail1StatusCheck) { tagId = document.getElementById('emailCheck'); tagId.innerText = ' *'; }
else { tagId = document.getElementById('emailCheck'); tagId.innerText = ''; }
if (!checkZip) { tagId = document.getElementById('zipCheck'); tagId.innerText = ' *'; }
else { tagId = document.getElementById('zipCheck'); tagId.innerText = ''; }
if (result1 == "false") { tagId = document.getElementById('nickNameCheck'); tagId.innerText = ' *'; }
else { tagId = document.getElementById('nickNameCheck'); tagId.innerText = ''; }
return false; // 폼 제출 방지
}
};
}
// 프로필 사진 변경 관련
function profileImage(){
if (confirm("프로필 사진을 변경하시겠습니까?") == true){
$('#imagesButton').click();
}else{
return false;
}
}
let data = {
boardMyhomeArticleNo: `${selectMyHome.boardMyhomeArticleNo}`,
memberId : `${member.memberId}`,
isLogOn : `${isLogOn}`,
member : `${member}`,
};
// 이미지 업로드 (나중에 미리보기로 만들어볼까?)
document.addEventListener('DOMContentLoaded', function() {
document.getElementById("imagesButton").addEventListener("change", function() {
if (this.files.length > 0) {
var formData = new FormData();
formData.append("file", this.files[0]);
// 아이디 가져오기
var memberId = data.memberId;
// 경로 지정
var src = '/memberProfileImage/' + memberId + '/';
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
processData: false,
contentType: false,
url: "/gami/member/memberProfileImageUpload.do",
data: formData,
dataType: "json",
success: function(fileName) {
alert('프로필 사진이 변경되었습니다.');
alert(fileName.fileName);
var fileName = fileName.fileName;
var image = src + fileName;
alert(image);
// img src 속성에 이미지 경로 넣어주기.
$("#memberProfileImage2").attr("src","");
$("#memberProfileImage").attr("src","");
$("#memberProfileImage").attr("src",image);
$("#memberProfileImage2").attr("src",image);
$("#memberImage").val(fileName);
},
error: function(status) {
alert('사진 업로드 실패');
alert(status);
}
});
} else {
console.log("파일이 선택되지 않았습니다.");
}
});
});