-
snsboard에 파일 업로드, 글 등록까지!
boardauthhandler (interceptor)화면에서 변경, 수정, 삭제가 일어날 때, writer값을 넘겨주도록 처리합니다.게시글 수정, 삭제에 대한 권한 처리 핸들러입니다.세션값과 writer(작성자) 정보가 같다면 컨트롤러를 실행하고, 그렇지 않다면 '권한이 없습니다.' 경고창 출력 후 뒤로가기.권한이 없습니다 경고창은 jsp에서 했었던 PrintWriter 객체를 이용합니다.PrintWriter 객체는 response 객체에게 받아 옵니다.@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("게시판 권한 인터셉터 발동!");String writer = request.getParameter("writer");HttpSession session = request.getSession();UserVO vo = (UserVO) session.getAttribute("login");System.out.println("화면에서 넘어오는 값: " + writer);System.out.println("세션에 저장된 값: " + vo);if(vo != null) {if(writer.equals(vo.getUserId())) {return true; //컨트롤러로 요청의 진입을 허용.}}response.setContentType("text/html; charset=utf-8");PrintWriter out = response.getWriter();out.print("<script> \r\n");out.print("alert('권한이 없습니다.'); \r\n");out.print("history.back(); \r\n");out.print("</script>");out.flush();return false;}}userauthhandler는회원 권한이 필요한 페이지 요청이 들어 왔을 때, 요청을 가로채 확인할 인터셉터입니다.글쓰기 화면과 마이페이지 화면 들어가는 요청을 가로채 검사하도록 합니다.권한이 없다면 로그인 페이지로 보내줍니다.public class UserAuthHandel implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {//세션에서 로그인 데이터를 얻은 후 확인해 줍니다.HttpSession session = request.getSession();if(request.getSession().getAttribute("login") == null) { //로그인이 안 된 시점.response.sendRedirect(request.getContextPath() + "/user/userLogin");return false; //컨트롤러 진입을 막습니다.}return true; //통과}}board에 파일 업로드!
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><!-- 파일 업로드에서는 enctype(인코딩타입)을 multipart/form-data로 반드시 설정합니다. --><form action="upload_ok" method="post" enctype="multipart/form-data">파일 선택: <input type="file" name="file"><br><input type="submit" value="전송"></form><form action="upload_ok2" method="post" enctype="multipart/form-data">파일 선택: <input type="file" name="files" multiple="multiple"><br><input type="submit" value="전송"></form><form action="upload_ok3" method="post" enctype="multipart/form-data">파일 선택: <input type="file" name="file"><br>파일 선택: <input type="file" name="file"><br>파일 선택: <input type="file" name="file"><br><input type="submit" value="전송"></form><hr><form action="upload_ok4" method="post" enctype="multipart/form-data">작성자: <input type="text" name="list[0].name">파일 선택: <input type="file" name="list[0].file"><br>작성자: <input type="text" name="list[1].name">파일 선택: <input type="file" name="list[1].file"><br>작성자: <input type="text" name="list[2].name">파일 선택: <input type="file" name="list[2].file"><br>작성자: <input type="text" name="list[3].name">파일 선택: <input type="file" name="list[3].file"><br></form></body></html>upload_ok.jsp를 만들어서 upload가 정상적으로 실행되면 업로드 완료! 라는 문구가 뜨게 해 주었습니다.@Autowiredprivate ISnsBoardService service;@GetMapping("/snsList")public void snsList() {}@PostMapping("/upload")@ResponseBodypublic String upload(MultipartFile file, String content, HttpSession session) {try {String writer = ((UserVO) session.getAttribute("login")).getUserId();//날짜별로 폴더를 생성해서 파일을 관리합니다.SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");Date date = new Date();String fileLoca = sdf.format(date);//저장할 폴더 경로String uploadPath = "C:\\Users\\WiTHUS\\Desktop\\upload\\" + fileLoca;File folder = new File(uploadPath);if(!folder.exists()) {folder.mkdir(); //폴더가 존재하지 않는다면 생성합니다.}String fileRealName = file.getOriginalFilename();//파일명을 고유한 랜덤 문자로 생성합니다.UUID uuid = UUID.randomUUID();String uuids = uuid.toString().replaceAll("-", "");//확장자를 추출합니다.String fileExtension = fileRealName.substring(fileRealName.indexOf("."), fileRealName.length());System.out.println("저장할 폴더 경로: " + uploadPath);System.out.println("실제 파일명: " + fileRealName);System.out.println("폴더명: " + fileLoca);System.out.println("확장자: " + fileExtension);System.out.println("고유랜덤문자: " + uuids);String fileName = uuids + fileExtension;System.out.println("변경된 파일명: " + fileName);//업로드한 파일을 서버 컴퓨터의 지정한 경로 내에 실제로 저장을 진행합니다.File saveFile = new File(uploadPath + "\\" + fileName);file.transferTo(saveFile);//DB에 insert 작업을 진행합니다.SnsBoardVO snsVO = new SnsBoardVO(0, writer, uploadPath, fileLoca, fileName, fileRealName, content, null);service.insert(snsVO);return "success";} catch (Exception e) {System.out.println("업로드 중 에러 발생: " + e.getMessage());return "fail"; //에러가 났을 시에는 실패 키워드를 반환합니다.}}