사실 참고했다기보다는 똑같이 따라 하면서 이해해보았다.
File엔티티를 만들어 준다. 저장될 파일 이름(filename), 업로드할 원래 파일의 이름(fileOriName), 저장할 장소(fileUrl)를 만들어준다.
간단한 CRUD를 할 수 있는 레파지토리를 생성해준다.
1. getOriginalFilename >> 전송한 파일의 이름을 가져온다.( ex) 증명사진. jpg 이런 형식으로)
2. FilenameUtils.getExtension >>
마지막.(점) 뒤를 반환해준다고 한다.
3. FilenameUtils.removeExtension >>
.(점) 앞을 반환해준다고 한다.
FilenameUtils를 사용하려면 Apache Commons를 build에 추가해야 한다.
4. fileUrl에 이미지를 저장할 곳을 지정해준다.
5. Apache Commons lang을 통해 랜덤 문자를 생성한다. (Files의 filename에 들어갈 것, 이 filename을 통해 view에서 파일을 찾아올 것이다.)
6. File 클래스로 저장할 경로 + 변환된 파일명을 변수로 넣어준다.
Service를 통해 데이터를 넣어준다.
파일 업로드 폼을 만들어주고
데이터가 잘 들어오는 것을 알 수 있다.
이미지가 잘 들어온다.
그런데 이것을 확인하려고 보니까 잘 안되었다.
간단하게 알아보기 위해서 임의로 1L을 변수로 넣고 찾은 file을 model에 넣고 Thymeleaf에 데이터를 넘겨주었는데
이러한 오류가 뜬다. 경로를 잘 지정한 것 같은데.. 그런데 여기서 신기한 건 Build Project를 하고 다시 새로고침을 하면 이미지가 선명하게 떴다. 여러 커뮤니티에도 물어보고 검색을 해봤는데
이러한 답변을 주셨다. 생각해보니 프로젝트 안에 이미지가 없는 상태로 빌드를 했는데 새로운 이미지가 들어오고 다시 빌드가 안된다면 이미지가 서버에 올라가지 않은 것 같다고 생각했다.
그래서 D드라이브에 경로를 지정하고
D드라이브에서 받아오려고 했는데
이것을 찾아보니까 보안상 안된다고 하더라.. 구글링을 해보니 외부에서 파일을 받아오려면
톰캣과 서블릿 등 설정을 해주어야 된다고 하는데 더 공부해봐야겠다.
'게시판' 카테고리의 다른 글
[SPRING BOOT_JPA] 부트스트랩으로 페이징구현 (1) | 2021.03.30 |
---|---|
[SPRING BOOT_JPA] JPA계층형 댓글 구현해보기-1 (2) | 2021.02.19 |
[SPRING BOOT_JPA] Multipartfile로 이미지 저장하기 (0) | 2021.02.05 |