728x90
반응형
이번 게시글에서는 REST API로 Multipartfile 이미지를 입력받아 GCS에 업로드하고, Image 엔티티를 생성해 DB에 저장하는 방법을 다루려고 한다. 이전 글에서 이어서 회원 정보의 프로필 사진을 업로드하는 것을 구현해 보자.
Member.java
@Entity
@Getter
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String email;
private String name;
// 프로필 이미지 주소
private String profileUri;
...
// 실제 이미지 용도에 맞춰 필요한 내용을 작성
// Setter 메서드 추가
}
MemberController.java
@RestController
@RequestMapping("/member")
@RequiredArgsConstructor
@SecurityRequirement(name = "Access Token")
@Tag(name = "Member", description = "회원 관리 API")
public class MemberController {
private final MemberService memberService;
@Operation(summary = "회원 프로필 사진 변경", description = "회원 프로필 사진을 변경합니다.")
@PostMapping("/update/profile")
public ApiResponseDto<?> updateProfileImage(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
@RequestPart MultipartFile file) {
if (file.isEmpty()) {
return ApiResponseDto.error(ErrorStatus.IMAGE_NOT_FOUND, ErrorStatus.IMAGE_NOT_FOUND.getMessage());
}
return ApiResponseDto.success(SuccessStatus.UPDATE_USER_INFO_SUCCESS, memberService.updateProfileImage(file, user.getUsername()));
}
}
MemberService.java
@Slf4j
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final DataBucketUtil dataBucketUtil;
@Value("${spring.cloud.gcp.storage.bucket}")
private String bucketName;
private final static String IMAGE_URI_PREFIX = "https://storage.googleapis.com/";
@Transactional
public MemberDetailResponseDto updateProfileImage(MultipartFile file, String email) {
Member member = memberRepository.getMemberByEmail(email);
// 파일 확인
if (file.getContentType() == null || !file.getContentType().startsWith("image")) {
throw new NotFoundException(ErrorStatus.INVALID_FILE_TYPE,
ErrorStatus.INVALID_FILE_TYPE.getMessage());
}
// Google Cloud Storage에 이미지 업로드
String imageUri;
try {
imageUri = IMAGE_URI_PREFIX + dataBucketUtil.uploadImage(file);
} catch (Exception e) {
e.printStackTrace();
}
// 실제 이미지 주소 저장
member.updateProfileUri(imageUri);
memberRepository.save(member);
return MemberDetailResponseDto.convertToDto(member);
}
}
728x90
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring] Spring Boot에서 Google Cloud Storage(GCS)에 파일 업로드하기 - 1 (0) | 2024.05.22 |
---|---|
[Spring] Spring Boot에서 SendGrid로 이메일 전송하기 - 3 (1) | 2024.05.21 |
[Spring] Spring Boot에서 SendGrid로 이메일 전송하기 - 2 (0) | 2024.05.21 |
[Spring] Spring Boot에서 SendGrid로 이메일 전송하기 - 1 (0) | 2024.05.21 |