Springboot

Spring boot/JPA 사용해서 이미지 업로드 구현

25G 2021. 7. 28. 15:55

툴 : vscode

 

spring프레임워크로 이미지 업로드를 구현해보자.

 

 

이미지 기본이론

일단 기본적인 이미지 요청 응답의 메커니즘을 생각해보자. 이미지 업로드를 요청했다고 생각하면 결국 통신 중에는 이미지가 문자열 데이터로 전송된다. 이때 content타입이 text/plain이라고 가정해보면 역직렬 화할 때 문자열로 출력이 될 것이다 그래서 요청 content타입을 먼저 맞춰줘야 한다. 그리고 io가 일어나서 이미지가 저장될 때 db에 바이너리 데이터가 그대로 들어가면 사진을 관리할 수 없다.

그래서 이미지는 원래 파일이기때문에 파일로 관리해야 한다. 즉 db에 주소 번지가 저장되야하는 것이다.

 

 

 

위 데이터를 컨트롤러에서 받기 위해선 먼저 name값이 전송되니 그 전송되는 name값으로 매개변수를 받으면 된다

 

사진을 저장할 때 프로젝트 내부에 있으면 프로젝트도 무거워지고 github에도 업로드되기 때문에 외부에 따로 파일을 만들어서 관리한다.

 

 

위 메서드 설명을 보면 path타입이다.

이미지를 저장할 경로를 설정하고 저장 위치에 파일을 byte로 보낸다.

nio는 이미지파일 업로드할때나 여러가지로 유용한 라이브러리

여기서 전송한 파일이

해당 경로에 잘 들어온 것을 확인할 수 있다

 

자 그럼 서버를 관리한다고 했을 때 어떤 데이터를 db에 넣고 이미지는 어떻게 관리해야 할까?

 

게시글에 사진을 포함시킨다고 하면

post에 이미지 경로 필드 하나 더 해주면 되는 것이다.

그럼 jsp에서 image에 src에 post엔티티에 있는 이미지 경로를 저장하면 되는 것이다.

 

그렇다면 path를 db에 저장했을 시에 서버를 이전한다고 한다면 경로가 다 틀어질 수 박에 없다

그렇기 때문에 그냥 경로는 서버가 들고 db에는 경로가 저장돼선 안된다.

그래서 위상 황에서 디비에 저장한다고 치면 imageFileName를 저장하는 것이다.

근데 이미지 파일 이름을 저장하게 하면 파일 이름이 겹칠 수 있다

그래서 UUID uuid = UUID.randomUUID();를 사용하면 중복되면 난수를 발생시킨다.

 

사진 보기

위와 같은 경로에

위와같은 코드를 작성한다 주석을 꼭 참고한다.

사진을 보여줄 jsp파일

 

urils에 경로를 관리할 파일을 따로 만든다

컨트롤러 주소 상수로 수정