ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로필 페이지 2
    Spring Boot/프로필 페이지 만들기 2021. 12. 15. 20:47

    이미지 파일 경로와 caption 부분을 데이터베이스에 넣기

     

     

    <ImageService.java> 파일

     

    @RequiredArgsConstructor
    @Service
    public class ImageService {
    	
    	private final ImageRepository imageRepository;
    	
    	@Value("${file.path}")
    	private String uploadFolder;
    	
    	@Transactional
    	public void 사진업로드(ImageUploadDto imageUploadDto, PrincipalDetails principalDetails) {
    		UUID uuid = UUID.randomUUID(); 
    		String imageFileName = uuid+"_"+imageUploadDto.getFile().getOriginalFilename(); 
    		System.out.println("이미지 파일이름 : "+imageFileName);
    		
    		Path imageFilePath = Paths.get(uploadFolder+imageFileName);
    		
    		try {
    			Files.write(imageFilePath, imageUploadDto.getFile().getBytes());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		Image image = imageUploadDto.toEntity(imageFileName, principalDetails.getUser()); 
    		imageRepository.save(image);
    	}
    }

     

    프로필 페이지 1에서 첨부한 ImageService.java 파일에서 

    		Image image = imageUploadDto.toEntity(imageFileName, principalDetails.getUser()); 
    		imageRepository.save(image);

    이 부분 추가했다.

     

     

    <ImageUploadDto.java> 파일

     

    ImageService.java 에, 사용자로부터 받은 caption 을 전달하기 위해

    public Image toEntity(String postImageUrl, User user) {
    		return Image.builder()
    				.caption(caption)
    				.postImageUrl(postImageUrl)
    				.user(user)
    				.build();
    	}

    위와 같은 메서드를 추가했다.

     

    더보기

    최종 <ImageUploadDto.java> 파일

     

    @Data
    public class ImageUploadDto {
    
    	private MultipartFile file;
    	private String caption;	
    	
    	
    	public Image toEntity(String postImageUrl, User user) {
    		return Image.builder()
    				.caption(caption)
    				.postImageUrl(postImageUrl)
    				.user(user)
    				.build();
    	}
    }

     

    우리가 Image 데이터베이스에 아래와 같은 데이터를 저장해야 하는데,

     

    caption, postImageUrl, userId 값은

    ImageService.java 파일과 ImageUploadDto.java 파일이 서로 상호작용하면서 ImageRepository.java 에 전달해줌

    (userId 는, image테이블과 user 테이블이 연관관계를 맺으면서 FK 로 설정된 값

    그래서 만약 1번 유저가 이미지를 업로드 했다면, image 데이터베이스에서 userId 에는 1이 입력됨)

    자세히 보려면 아래 펼쳐서 보기

     

    더보기

    먼저, ImageService.java 파일을 보면

     

    	Image image = imageUploadDto.toEntity(imageFileName, principalDetails.getUser());

    이런식으로 ImageUploadDto.java 의 toEntity 메서드를 호출한다.

     

     

     

     

    1. caption

     

    그래서 

    ImageUploadDto.java 파일에서 toEntity 메서드를 보면 아래와 같다.

     

    @Data
    public class ImageUploadDto {
    
    	private MultipartFile file;
    	private String caption;	
    	
    	
    	public Image toEntity(String postImageUrl, User user) {
    		return Image.builder()
    				.caption(caption)
    				.postImageUrl(postImageUrl)
    				.user(user)
    				.build();
    	}
    }

     

    즉, ImageUploadDto.java 파일에서 사용자로부터 받은 caption 값을 builder를 사용해서

    ImageService.java 로 전달해준다. 그리고 이 값이 데이터베이스에 저장되게 함.

     

    2. postImageUrl, userId

     

    이 값은 ImageService.java 에서 

     

     

    @RequiredArgsConstructor
    @Service
    public class ImageService {
    	
    	private final ImageRepository imageRepository;
    	
    	@Value("${file.path}")
    	private String uploadFolder;
    	
    	@Transactional
    	public void 사진업로드(ImageUploadDto imageUploadDto, PrincipalDetails principalDetails) {
    		UUID uuid = UUID.randomUUID(); 
    		String imageFileName = uuid+"_"+imageUploadDto.getFile().getOriginalFilename(); 
    		System.out.println("이미지 파일이름 : "+imageFileName);
    		
    		Path imageFilePath = Paths.get(uploadFolder+imageFileName);
    		
    		try {
    			Files.write(imageFilePath, imageUploadDto.getFile().getBytes());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		Image image = imageUploadDto.toEntity(imageFileName, principalDetails.getUser()); 
    		imageRepository.save(image);
    	}
    }

     

     

    postImageUrl 값은 UUID 값을 같이 넣어서 imageFileName 변수로 

    userId 값은 사진업로드 메서드의 매개변수 PrincipalDetails 를 이용해서 아래와 같이

    imageUploadDto를 호출할 떄

    principalDetails.getUser() 값으로 ImageUploadDto.java 에 전달되었다가 다시 받아서 imageRepository 에 저장됨

     

     

     

     

    		Image image = imageUploadDto.toEntity(imageFileName, principalDetails.getUser()); 
    		imageRepository.save(image);

     

     

     

     

     

     

    이렇게 하고 사이트에서 이미지 업로드하면 데이터베이스의 image 테이블에 아래와 같이 값이 잘 들어옴.

    1번 유저가 이미지를 업로드 했기 때문에 userId 값이 1이 됨

     

     

    참고 자료 : 이지업 강의 사이트 "스프링부트 SNS프로젝트 - 포토그램 만들기" 

    'Spring Boot > 프로필 페이지 만들기' 카테고리의 다른 글

    프로필 페이지 7 - @JsonIgnoreProperties  (0) 2021.12.18
    프로필 페이지 5  (0) 2021.12.16
    프로필 페이지 4  (0) 2021.12.16
    프로필 페이지 3  (0) 2021.12.15
    프로필 페이지 1  (0) 2021.12.14

    댓글

Designed by Tistory.