티스토리 뷰

DB에 업로드

전에 만든 ImageService클래스안에 사진업로드 맨 아래 코드 추가

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

imageUploadDto를 받아서 Image형태로 만들기위해 UUID와 파일의 이름을

합친 imageFileName(Image클래스에 postImageUrl이 될것)과 세션에 저장된 유저를 매개변수로 넣어줍니다

 

ImageUploadDto

package com.cos.photogramstart.web.dto.image;

@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();
	}
}

받아온 파일이름과 업로드한 유저를 받아와 build를 하여 반환

 

확인을 할려면 service에서 sysout을 하여 imageEntity를 넣은뒤 업로드해보면 거기에 유저에 대한정보와 사진에 대한 정보가 잘 나온다면 성공이다.

 

예외처리

	@PostMapping("/image")
	public String imageUpload(ImageUploadDto imageUploadDto, @AuthenticationPrincipal PrincipalDetails principalDetails){
		
		if(imageUploadDto.getFile().isEmpty()) {
			throw new CustomValidationException("이미지가 첨부되지 않았습니다.", null);
		}
		
		imageService.사진업로드(imageUploadDto, principalDetails);
		return "redirect:/user/"+principalDetails.getUser().getId();
	}

if문을 걸어 만약 파일이 비어있다면 위와같이 예외를 발생시킨다

회원가입할때 처럼 Dto에 @NotBlank걸면 안되나요?

MultipartFile에는 @NotBlank가 인식이 안됩니다 그렇기 때문에 위와 같이 예외처리를 해주셔야합니다.

 

CustomValidationException을 밑과 같이 수정

	@ExceptionHandler(CustomValidationException.class)
	public String validationException(CustomValidationException e) {

		if(e.getErrorMap() == null) {
			return Script.back(e.getMessage());
		}else {	
			return Script.back(e.getErrorMap().toString());
		}
	}

원래는 else문에 map을 string화하여 반환하였지만 파일업로드에 exception은 메시지만 매개변수로 넣었으니 에러가 나게된다 그리하여 파일업로드 같이 메시지만 전달하는 예외처리는 위와같이 map이 비었을경우 메시지만 전달하구 스크립트 문을 실행시켜준다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함