## 57. 파일 업로드 다루기 - multipart/form-data POST 요청 파라미터 인코딩
- apache.org의 라이브러리를 이용하여 multipart/form-data 파라미터를 다루는 방법
- 네이버클라우드 mysql DBMS 사용하기
BoardDetailServlet.java
ㄴ 첨부파일 삭제하는 버튼 생성하기
=>
서버 Start
=>
ㄴ [삭제] 버튼 추가됨을 확인
ㄴ [삭제] 버튼 선택
=>
=>
ㄴ BoardDeleteServlet.java 파일 복사
=>
ㄴ BoardFileDeleteServlet 이라는 이름으로 handler 패키지에 붙여넣기
=>
BoardFileDeleteServlet.java
ㄴ /board/delete -> /board/file/delete 로 경로 변경
=>
BoardFileDeleteServlet.java
ㄴ fileNo 추가
=>
BoardFileDeleteServlet.java
ㄴ 이후에 findFileBy 라는 메서드를 생성할 것
=>
BoardFileDeleteServlet.java
ㄴ 이후에 AttachedFile 에 BoardNo 를 추가할 것
=>
BoardFileDeleteServlet.java
ㄴ 로그인 한 작성자가 작성한 게시글의 첨부파일만 삭제 가능하도록 함
=>
BoardFileDeleteServlet.java
ㄴ 해당 코드 제거
=>
BoardFileDelete.java
ㄴ delete(b) -> deleteFile(fileNo) 로 변경
ㄴ 이후에 boardDao 인터페이스에 deleteFile 메서드 정의 추가해줄 것
ㄴ 게시글 -> 첨부파일로 변경
=>
BoardFileDelete.java
ㄴ 실행 후 해당 글의 상세보기로 이동하도록 함
=>
BoardDetailServlet.java
ㄴ category 도 받아주도록 함
=>
BoardDetailServlet.java
ㄴ Board board = InitServlet.boardDao.findBy(Integer.parseInt(request.getParameter("category")), Integer.parseInt(request.getParameter("no"))); -> 각각 분리하여 변수에 넣어주도록 함
=> 아래 쪽에서도 쓰이기 때문
BoardDetailServlet.java
ㄴ 위에서 분리한 category 이용
=>
ㄴ 서버 Restart
=>
ㄴ 브라우저 새로고침하면 500 에러가 발생하지만 url 값이 제대로 넘어가는지만 확인
=>
report-common
BoardDao.java
ㄴ BoardDao 인터페이스에서 정의되지 않은 findFileBy 메서드를 정의하도록 함
=>
MySQLBoardDao.java
ㄴ 이미 존재하는 findBy 메서드를 복사하여 활용하여 findFileBy 메서드 구현하기
=>
MySQLBoardDao.java
=>
MySQLBoardDao.java
ㄴ 해당 코드 제거
=>
MySQLBoardDao.java
=>
BoardDao.xml
ㄴ 이미 존재하는 findBy 를 복사하여 활용하여 findFileBy 구현하기
=>
BoardDao.xml
ㄴ 이후 attachedFileMap 이라는 resultMap 을 추가할 것임
=>
BoardDao.xml
ㄴ 쿼리문 수정
=>
BoardDao.xml
ㄴ attachedFileMap 이라는 resultMap 생성
AttachedFile.java
ㄴ boardNo 추가
=>
AttachedFile.java
ㄴ Getter/Setter 추가
=>
=>
BoardDao.xml
ㄴ board_no -> boardNo 로 변경
=> 프로퍼티 값이 boardNo 이기 때문
=>
BoardFileDelete.java
ㄴ 주석처리 해두기
=>
BoardFileDelete.java
ㄴ attachedFile 출력해보기 위한 출력문 추가
=>
AttatchedFile.java
ㄴ attachedFile 출력하기 위해 toString() 생성하기
=>
=>
AttachedFile.java
=>
ㄴ 서버 Restart 해주기
=>
로그인 후 게시글 상세보기
=>
ㄴ [삭제] 선택
=>
=>
ㄴ 콘솔 창에 AttachedFile 값 정상적으로 출력됨을 확인
BoardFileDelete.java
ㄴ board 출력해 보기 위한 코드 추가
=>
Board.java
ㄴ board 출력하기 위한 toString 메서드 추가
=>
Board.java
=>
Board.java
=>
ㄴ 서버 Start 해주기
=>
=>
ㄴ board 값이 정상적으로 출력됨을 확인
ㄴ 직원1 로 로그인 되어있는 상태
=>
ㄴ 직원2 가 작성한 글의 첨부파일 [삭제] 선택
=>
=>
BoardFileDelete.java
ㄴ 해당 코드 주석 풀어주기
=>
BoardFileDelete.java
ㄴ Create method 'deleteFile(int)' in type 'BoardDao' 선택하여 BoardDao 인터페이스 메서드 정의하기
=>
BoardDao.java
=>
MySQLBoardDao.java
=>
MySQLBoardDao.java
ㄴ delete 메서드를 복사하여 활용하여 deleteFile 메서드 구현하기
=>
BoardDao.xml
ㄴ delete 를 복사하여 활용하여 deleteFile 생성
=>
BoardDao.xml
=>
ㄴ 서버 Restart 해주기
=>
ㄴ [삭제] 선택
=>
ㄴ 첨부파일 1개가 삭제됨을 확인
BoardFormServlet.java
ㄴ 해당 코드 복사하기
=>
BoardDetailServlet.java
ㄴ 복사한 코드 붙여넣기
=>
ㄴ [파일 선택] 버튼 생성됨
BoardDetailServlet.java
ㄴ 인코딩 타입을 multipart/form-data 로 변경해주기
BoardAddServlet.java
ㄴ 해당 코드 복사하기
=>
BoardUpdateServlet.java
ㄴ 복사한 코드 붙여넣기
=>
BoardUpdateServlet.java
ㄴ 해당코드 아래쪽으로 이동시키기
=>
BoardUpdateServlet.java
ㄴ 해당코드 아래쪽으로 이동시키기
=>
BoardUpdateServlet.java
ㄴ 해당 코드 위쪽으로 이동시키기
=>
BoardUpdateServlet.java
ㄴ 필요없는 변수는 제거하도록 함
=>
BoardUpdateServlet.java
ㄴ 해당 코드 제거
=>
BoardUpdateServlet.java
ㄴ 해당 코드 제거
=>
BoardUpdateServlet.java
ㄴ no 도 추가
=>
BoardUpdateServlet.java
ㄴ out.printf("<meta http-equiv='refresh' content='1;url=/board/list?category=%d'>", category); 처럼 html 태그를 이용하는 대신 응답헤더에 추가하는 방식을 이용하도록 함
=>
BoardUpdateServlet.java
ㄴ 해당 코드는 이제 제거
=>
BoardUpdateServlet.java
ㄴ 주석 깔끔하게 제거
=>
BoardUpdateServlet.java
ㄴ 게시글을 정상적으로 변경했으면, 그 게시글의 첨부파일을 추가하도록 함
=>
ㄴ 서버 Restart 해주기
=>
=>
ㄴ [변경] 선택
=>
ㄴ 첨부파일 추가되어 변경됨을 확인
=>
ㄴ 첫 번째 첨부파일 [삭제] 선택
=>
ㄴ 새로운 파일 첨부 후 [변경] 선택
=>
ㄴ 정상적으로 변경됨을 확인
ㄴ 두 번째 파일 [삭제] 선택
=>
ㄴ 정상적으로 삭제됨을 확인