[2022/11/04 FRI] spring - mymelon 프로젝트

kangsun·2022년 11월 4일
0

Spring

목록 보기
4/24

media - create 미디어 쓰기

  • 1) 미디어 그룹 목록에서 음원등록 버튼에 링크 걸기
    create.do페이지로 가면 mediagroupno 그룹번호를 가지고 가는 링크.
  • 2) MediaCont.java 백엔드 @RequestMapping GET방식
    list페이지 링크에 들어온
  • 3) createForm.jsp 프론트
    createForm 대충 생성해서 페이지에 접속되는지 확인


음원등록페이지 접속되는지 중간확인




  • 첨부파일을 넣어줄 것이기 때문에, enctype을 작성해줘야한다.
  • 인풋으로 히든속성으로 부모글번호를 항상 가져와야한다.


  • 4) MediaDAO에 create()함수 만들기
    글작성해주는 sql문 작성
  • 5) MediaCont()
    사용자가 요청한 정보를 view와 연결시키기 위해 POST방식 맵핑한다.
  • → ① enctype으로 받으면 text,file 들이 섞여서 들어온다.
    자바에선 cos.jar 가 텍스트파일과 그냥 파일을 읽어서 교통정리를 해줬다.
    spring에선 Multipartfile이라는 클래스가 따로 있다.


  • → ② DTO로도 받을 수 있다.
    file, name에 관한 DTO에 따로 담으면 각 이름에 따라 객체를 읽을 수 있다.

  • 6) ② MediaDTO() 변수선언과 getter,setter 생성

    오른쪽의 name으로 getter setter를 활용하면 각 이름으로 된 파일을 정확히 가져올 수 있다.




    이렇게 다시 사용할 수 있다.

  • 7) MediaCont() POST 방식 다시작성
    - msgView페이지 복사붙여넣기

    - UploadSaveManager.java 카페에서 다운받아 net.utility 팩키지에 저장



    - [첨부된 파일 처리] UploadSaveManager.jar 활용해서 저장.

    - sql문 성공실패여부 페이지

    - 다시시도 페이지에 링크걸기
    mediagroupno 그룹넘버를 계속 가지고 다녀야한다.
    그룹넘버는 createForm에서(부모페이지) 넘어와야한다



	//음원등록2 POST 방식
	@RequestMapping(value = "/media/create.do", method = RequestMethod.POST) 
	public ModelAndView createProc(@ModelAttribute MediaDTO dto, HttpServletRequest req) {
						//② String title, MultipartFile posterMF, MultipartFile filenameMF 
						//  → 이렇게 해도 상관 없음.
		ModelAndView mav = new ModelAndView();
		mav.setViewName("media/msgView");
		
		/////////////////////////////////////////////////
		// [첨부된 파일 처리] 
		// 사용자가 전송시킨 파일을 storage폴더에 저장시켜야 한다.
		// → 실제파일은 /storage폴더에 저장
		// → 저장된 파일 관련 정보는 media테이블에 저장
		
		// 파일 저장 폴더의 실제 물리적인 경로 가져오기
		String basePath=req.getRealPath("/storage");
		
		
		// [createForm.jsp]
		// 1) <input type='file' name='posterMF' size='50'>
		MultipartFile posterMF=dto.getPosterMF();
		// /storage폴더에 파일 저장하고, 리네임된 파일명 반환
		String poster=UploadSaveManager.saveFileSpring30(posterMF, basePath);
		dto.setPoster(poster); //리네임된 파일명을 dto 객체 담기
		
		// 2) <input type='file' name='filenameMF' size='50'>
		MultipartFile filenameMF=dto.getFilenameMF();
		String filename=UploadSaveManager.saveFileSpring30(filenameMF, basePath);
		dto.setFilename(filename);
		dto.setFilesize(filenameMF.getSize());
		/////////////////////////////////////////////////
		
		int cnt=dao.create(dto);
		if(cnt==0) {
			//mav.setViewName("mediagroup/msgView");
			String msg1  = "<p>미디어 그룹 등록 실패</p>";
			String img   = "<img src='../images/success.png'>";
			String link1 = "<input type='button' value='다시시도' onclick='javascript:history.back()'>";//다시시도 버튼 자바스크립트 넣어준다
			String link2 = "<input type='button' value='목록으로' onclick='location:href=\"list.do?mediagroupno=" + dto.getMediagroupno() + "\"'>"; //location.href="list.do" 
			mav.addObject("msg1",  msg1);
			mav.addObject("img",   img);
			mav.addObject("link1", link1);
			mav.addObject("link2", link2);
		}else {
			String msg1  = "<p>미디어 그룹 등록 성공</p>";
			String img   = "<img src='../images/fail.png'>";
			String link2 = "<input type='button' value='목록으로' onclick='location:href=\"list.do?mediagroupno=" + dto.getMediagroupno() + "\"'>"; //location.href="list.do" 
			mav.addObject("msg1",  msg1);
			mav.addObject("img",   img);
			mav.addObject("link2", link2);
		}//if end
		
		return mav;
		
	}//createProc() end

결과확인


⚠️ 에러 - 미디어 그룹 목록이 뜨지 않음

media목록 실패 [ORACLE] 오라클 ORA-01400: NULL을 ("USER"."TABLE"."COLUMN") 안에 삽입할 수 없습니다.

- rs를 re로 오타..

  • 여기서 바로 확인 가능/ refresh 하기


상세보기


이 부분을 누르면 9번의 게시물을 상세보기하는 페이지이다.

  • 1) list 제목에 링크 달아주기
  • 2) MediaCont
  • 3) MediaDAO sql 작성


view페이지 작업

  • 4) readMP3.jsp
    파일이 mp3이면 readMP3 페이지를 띄워준다.
  • 5) readMP4.jsp


삭제

  • 1) list페이지 수정버튼에 mediano 그룹번호가 담긴 링크를 걸어준다.
  • 2) MediaCont 컨트롤러로 deleteForm.jsp페이지와 mediano값 연결
  • 3) deleteForm.jsp 프론트페이지 작업
  • 4) MediaCont 컨트롤러에서 삭제 클릭 후 결과페이지 작성
    - 내가 삭제하고자하는 파일명을 행을 삭제하기 전에 따로 글 정보를 저장해둬야한다. (삭제할 파일명을 확인하기 위해)
    - OldDTO에 파일명을 먼저 저장해둔다.
    MediaDTO oldDTO=dao.read(mediano);

    - 행만 삭제되어야하는 것이 아니라 첨부되었던 파일도 삭제를 해줘야한다.
  • 5) MediaDAO 에서 삭제 sql문 데이터연결

⚠️ 에러 - 삭제버튼 누르면 error 페이지가 뜸

Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: ""

삭제버튼 링크에 dto객체에있는 mediano를 담아줘야 하는데 그냥 mediano를 담아주었다.

  • 6) storage폴더 안에 있는 파일 삭제되는 것 확인



수정

  • 1) list Form에서 수정버튼에 링크걸기
  • 2) MediaCont 컨트롤러로 updateForm.jsp페이지와 mediano값 연결
    수정에서는 수정하고자 하는 "행" 값을 가져오기 위해 dao의 read함수를 가져와야한다.
  • 3) updateForm 만들기
    createForm 참고하고, 폼에 수정할 값들을 불러온다.
  • 4) MediaCont에 updateForm에서 POST방식으로 전송된 파일을 가져와서 수정해준다.

    → 수정하기 전에 기존에 저장되어 있는 파일들을 먼저 따로 다른 변수에 보관을 해둬야 한다.
    → 저장하지 않고 행을 바로 지워버리게 되면 제목만 수정하는 경우에도 모든 파일이 지워지기때문에 그 행의 파일을 보관해둔다.


    - 포스터 파일 수정?

    - 파일 이름?

    - 파일 수정 성공 실패
  • 5) MediaDAO 에서 수정 sql문 데이터연결

결과확인





⚠️ 에러 - ORA-00971 : SET 키워드가 없습니다.


경로 개념



- list.do는 "슬래시 /" 가 붙지 않았는데, 그 이유는 media폴더 안에 들어와있기 때문이다.

profile
코딩 공부 💻

0개의 댓글