[Springboot] Springboot 스터디 6일차
in Study on Springboot
multiple 속성 주면 파일 여러개 올리기 가능.
enctype =”multipart/form-data 있어야 파일 전송이 서버로 가능
인코딩 속성을 주는거. 파일 줄 떄는 인코딩으로 해서 주기 때문에 텍스트는 문제가 없느느데 파일은 바이러니 코드(이진수로 만들어진) 그떄 얘가 인코딩이 되면 파일이 서버로 정상적으로 전달되지는 않음. 인코딩 방식을 지정하지 않겠다의 의미로 파일을 인코딩 안하고 전송.
Board객체 전달받고 했는데 파일도 전달 받기 가능.
보드 객체로 부터 꺼내서 파일 정보 확인
로거는 slf4j 로거여야 정상 작동이 된다.
컨텐츠 타입은 어떤 타입인지 확인이 가능하다.
파일로 업로드를 해야되는데
[파일 업로드 방식]
- 파일을 업로드 폴더로 복사.
- 업로드 된 파일의 경로를 db에 추가
<1> [오라클에선 BLOB이라는 타입이 있는데 파일을 이진코드로 만들었을 떄 그대로 디비에 넣을 수 있는 거]
우리가 하는 방식은 서버에서 정해둔 업로드 폴더에 복사본을 넣어두고 그 경로를 디비에 넣어둠.
또 다른 방식은 File자체를 2진수 코드로 바꾸고 인코딩을 함
<2> File -> Encode -> BLOB
우리는 실제 파일 복사해서 경로 해서 넣고 디비에는 경로가 저장. (디비에는 파일이 아니고)
저 첨부파일 아직 안 만듬
table: board_attach 만들어야
도메인이 dto라 생각하면 ㅗ딘다.
이 메서드가 실행됐을떄 파일 정보들을 꺼내와서 바이ㅡ 코드로 꺼내와서 카ㅣ를 한다(실제 경로에)
이 프로젝트 밑에 있는 파일 밑으로 복사해주고 얘가 가진전체 경로와 파일 경로를 한 파일씩 담고 걔를 반환해줄 것이다.
디비로 가져가서 디비에다가 파일 경로를 저장해줘야한다.
파일 경로를 atttach 리스트로 다시 받을 거 얘를 디비에 등록하도록 처리해줘야 한다.
등록 먼저 해두고 최대값으로
디비 보면
글쓰기를 하는데 어떤 쿼리가 동작하냐면
boardNo는 AI로 자동증가. 게시글이 등록 되기 전까지는 어떤 번호인지 모른다. 등록 되야 몇번인지 알 수 있다.
근데 우리가 게시글 하나 등록하고 딸려있는 첨부파일 등록해야 되는데 그건 boardattch인데 여기에 fileno를 적어줘야하는데
어떤 첨부파일의 글번호인지 알려면 글번호 있어야. 그걸 board_attach에 있어야한다.
board테이블에 먼저 들어가야 그걸 알 수 있다.
거꾸로 파일 업로드를 보드 어태치 하고 보드에 넣는건 말이 안된다(글번호를 모르니까) 얜 autoincrement 해서 방금 등록한게 가장 큰 번호일거. 글 번호 알아내기 위해서 파일 등록하기 전에 글번호가 가장 최대값인 번호 조회해서 그걸 여기에 넣어주겠다.
selectkey 쓰면 insert 하기전에 select 하기가 가능하다.
boardno으로 파라미터 사용하겠다.
(이건 마이바티스의 기능)
order는 이 쿼리를 이거 다음에 돌릴 건지 그 전에 돌릴 건지 순서를 정함. before를 하면 본 쿼리 전에 도는거고 after라 하면 ㅇ
keypropert느는 boardno에서 지정한 대로 밑에서 쓸 수 있음.
서비스를 더 만들어서 x값을 구하는 걸 할 수 있는 방법도 있는데 마이바티스에 이런 기능이 있다고
알수 없는 문자 섞인게 uuid고 디비에도 조회 하면 board에 attach조회 했을 때 업로드 된 경로가 나온다.
파일 이름은 원본 이름만 나오게 하자.
코드 잘 작성 한거 같은데 ?
한 30분 한시간 흘름. 그 다음 찾는데 오타 사소한 이런 문제.
파일 등록 할 때 띄워줘야 할 듯
글 읽기에서 파일 목록이 떠야 하는데
게시글 읽기에 파일 정보도 가져와야
글번호 알면 첨부파일 가서 그 글번호에 해당하는 내용 가져올 수 있다.