스프링부트 공부기록(27) - 영화 리뷰 프로젝트 :: 파일 업로드 처리, 영화 포스터 업로드 구현하기
my code archive
article thumbnail
반응형

🤍파일 업로드 처리 구현하기

1. application.properties에 파일 업로드를 위한 코드 추가

spring.servlet.multipart.enabled=true	//파일 업로드 가능 여부 선택
spring.servlet.multipart.location=C:\\upload	//업로드된 파일 임시 저장 경로
spring.servlet.multipart.max-request-size=30MB	//한 번에 최대 업로드 가능 용량
spring.servlet.multipart.max-file-size=10MB	//파일 하나의 최대 크기

 

2. UploadController 클래스 작성

  • 실제 업로드된 파일 처리는 컨트롤러로 처리함. (스프링에서는 MultipartFile 타입을 제공하므로 별도 추가적인 처리가 필요없음.)
  • 이번 영화 리뷰 프로젝트에서는 파일 업로드와 관련된 모든 작업을 Ajax 방식으로 처리 -> 별도의 화면 필요 없음 -> @RestController

3. UploadTestController 작성

 

4. UploadEX.html 작성

 

5. 실행 후 화면에서 Upload 버튼을 클릭하면 여러 개의 파일을 업로드할 수 있는 화면을 확인할 수 있다.

  • 버튼 클릭 시 FormData를 생성하고 컨트롤러에 사용하는 uploadFile이라는 이름으로 파일 데이터를 추가함.

  • 선택한 파일 정보가 콘솔창을 통해 출력됨.

 

6. Ajax 업로드 처리

7. 업로드된 파일을 저장하기 위해 application.properties에 경로를 추가한다. 이 설정값을 컨트롤러에서 이용하도록 한다.

org.zerock.upload.path=C:\\upload
public class UploadController {

    @Value("${org.zerock.upload.path}")
    private String uploadPath;
}

8. UploadController 클래스 수정

  • 업로드된 확장자가 이미지만 가능하도록 검사
  • 동일한 이름의 파일이 업로드되지 않도록 UUID 이용
  • 업로드된 파일을 저장하는 폴더의 용량
  • 동일한 폴더에 너무 많은 파일이 업로드되지 않도록 날짜 폴더를 생성함.

9. 프로젝트 실행 후 위의 코드를 이용하면 C:\upload 폴더에 '년/월/일' 폴더가 생성되면서 파일들이 저장된 것을 확인할 수 있다. 파일 이름에는 각자 고유의 UUID 값이 붙게 된다.

🤍업로드 결과 반환과 화면 처리

1. UploadResultDTO 클래스 작성

  • 해당 클래스는 실제 파일과 관련된 모든 정보를 가짐, 나중에 전체 경로가 필요한 경우를 대비해서 getImageURL() 메서드를 제공함.

  • JSON으로 반환된 업로드 결과를 화면에서 확인하기 위해서는 브라우저 링크를 통해 <img> 태그 추가 필요
  • 서버에서는 해당 URL이 호출되는 경우 이미지 파일 데이터를 브라우저로 전송해주어야 함.

2. UploacController 코드 작성

  • URL 인코딩된 파일 이름을 파라미터로 받아서 해당 파일을 byte[] 타입으로 만들어서 브라우저로 전송함.
  • 파일 확장자에 따라 브라우저에 전송하는 MIME 타입이 달라져야 하는 문제는 probeContentType()을 이용해서 처리함.
  • 파일 데이터 처리는 FileCopyUtils를 이용해서 처리함.

3. uploadEx.html에 업로드 이미지를 보여줄 수있는 자바스크립트 함수 작성

 

4. 실행 화면

🤍썸네일 이미지 생성과 화면 처리

  • 업로드된 파일을 저장하고 썸네일 라이브러리를 활용해 썸네일 파일을 만들어줌.
  • 썸네일 파일은 파일 맨 앞에 's_'를 붙여 일반 파일과 구분함.
  • UploadResultDTO에 getThumbnailURL() 추가

1. build.gradle에 썸네일 라이브러리 Thumbnailator 추가

 //썸네일
    implementation group: 'net.coobird', name: 'thumbnailator', version: '0.4.12'

 

2. UploadController 내 uploadFile() 코드 수정

 

3. UploadResultDTO 클래스에 브라우저에서 썸네일 처리하기 위한 getThumbnailURL() 코드 작성

 

4. 위 코드를 반영하면 파일 업로드 결과과 썸네일 이미지들만 추가되고, 업로드된 파일 이미지도 자동으로 조정된 결과를 확인할 수 있다.

🤍업로드 파일 삭제

1. UploadController 코드 작성

  • 파일 URL 자체가 '년/월/일/uuid_파일명'으로 구성되어 있으므로 이를 이용해 삭제할 파일의 위치를 찾아서 간단하게 삭제할 수 있다.
  • 컨트롤러의 removeFile()은 경로와 UUID가 포함된 파일 이름을 파라미터로 받아 삭제 결과를 Boolean 타입으로 만들어서 전송함.

 

2. uploadEx.html 코드 작성

  • 각 파일을 삭제할 수 있도록 버튼을 추가하고 버튼과 이미지를 하나의 <div>로 묶음

3. 실행 화면

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형