ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MyWeb
    SPRING 2022. 2. 17. 18:55

    snsboard에 파일 업로드, 글 등록까지!


    boardauthhandler (interceptor)

    화면에서 변경, 수정, 삭제가 일어날 때, writer값을 넘겨주도록 처리합니다.
    게시글 수정, 삭제에 대한 권한 처리 핸들러입니다.
    세션값과 writer(작성자) 정보가 같다면 컨트롤러를 실행하고, 그렇지 않다면 '권한이 없습니다.' 경고창 출력 후 뒤로가기.
    권한이 없습니다 경고창은 jsp에서 했었던 PrintWriter 객체를 이용합니다.
    PrintWriter 객체는 response 객체에게 받아 옵니다.
     
    @Override
    public 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{
     
     
    @Override
    public 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가 정상적으로 실행되면 업로드 완료! 라는 문구가 뜨게 해 주었습니다.

     

    @Autowired
    private ISnsBoardService service;
     
    @GetMapping("/snsList")
    public void snsList() {}
    @PostMapping("/upload")
    @ResponseBody
    public 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"; //에러가 났을 시에는 실패 키워드를 반환합니다.
    }
     
    }

    'SPRING' 카테고리의 다른 글

    MyWeb  (0) 2022.02.18
    MyWeb  (0) 2022.02.17
    MyWeb  (0) 2022.02.15
    MyWeb  (0) 2022.02.15
    mywebproject  (0) 2022.02.11
Designed by Tistory.