본문 바로가기

게시판

[SPRING BOOT_JPA] DB를 통해 파일 업로드 및 다운로드 하기

참고자료>>leleluv1122.github.io/springboot/spring-boot-jpa-mysql-jsp-%ED%8C%8C%EC%9D%BC%EC%97%85%EB%A1%9C%EB%93%9C/

 

스프링 부트 & jpa & mysql & jsp 파일(이미지)업로드

Spring boot에서 파일 업로드(MultipartFile)를 구글링해봐도 JPA는 나오지않구 mybatis밖에 나오지 않아서 쓰는 글ㅠ 내가 못찾은 거일수도….ㅋㅋㅋ 똑똑한사람들은 응용해서 잘할수도잇고!! mybatis 파일

leleluv1122.github.io

사실 참고했다기보다는 똑같이 따라 하면서 이해해보았다.

 

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드라이브에서 받아오려고 했는데 

이것을 찾아보니까 보안상 안된다고 하더라.. 구글링을 해보니 외부에서 파일을 받아오려면

톰캣과 서블릿 등 설정을 해주어야 된다고 하는데 더 공부해봐야겠다.