https://cloud.google.com/?hl=ko
상단에 "만들기" 버튼 클릭
버킷 이름 지정후 위치는 Region -> asia-northeast3(서울)로 변경
그룹 프로젝트로 진행할 경우에는 "이 버킷에 공개 액세스 방지 적용" 체크 해제
저장된 이미지 파일의 링크를 클릭후 공개 URL을 복사후 접속하면 저장된 이미지를 확인할 수 있습니다.
버킷 선택 -> 권한 탭으로 이동
IAM 및 관리자 -> 서비스 계정으로 이동
서비스 계정 만들기 클릭
이름은 springboot-storage-access로 하고 아래와 같이 입력해 만들어줬습니다.
키 만들기
만든 서비스 계정을 클릭하고서, 키 탭으로 이동해 키 추가를 클릭합니다.
생성된 json key 파일은 컴퓨터에 저장해둡니다.
implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter', version: '1.2.5.RELEASE'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-storage', version: '1.2.5.RELEASE'
spring.cloud.gcp.storage.credentials.location=classpath:{json key 파일 이름}.json
spring.cloud.gcp.storage.project-id={json 파일 안에 있는 project-id 값}
@Bean
public Storage storage() {
return StorageOptions.getDefaultInstance().getService();
}
마지막으로 config 파일에 Storage를 Bean으로 등록해줍니다.
스프링 부트 설정이 완료되었다면 아래는 GCS에 이미지 파일을 저장하는 코드입니다.
public void saveBoardProfileImage(MultipartFile imageFile, long boardId) {
String originalName = imageFile.getOriginalFilename();
String ext = imageFile.getContentType();
String uuid = UUID.randomUUID().toString();
String fileName = uuid + "_" + originalName;
String uploadPath = UPLOAD_PATH + uuid;
// BUCKET_NAME = GCS에 등록된 버킷 이름
// 파일은 https://storage.googleapis.com/{버킷_이름}/{UUID}를 통해 조회할 수 있음
BlobInfo imageInfo = BlobInfo.newBuilder(BUCKET_NAME, uuid)
.setContentType(ext)
.build();
BlobInfo blobInfo = null;
try {
blobInfo = storage.create(
imageInfo, imageFile.getInputStream()
);
ImageFileCreateDto dto = ImageFileCreateDto.builder()
.originalName(originalName)
.ext(ext)
.uuid(uuid)
.uploadPath(uploadPath)
.fileName(fileName)
.boardId(boardId)
.build();
fileRepository.save(dto.toEntity(dto));
} catch (IOException e) {
e.printStackTrace();
}
}
GCS에 저장된 이미지는 <img>
의 src에 상단에 이미지 파일의 링크를 지정하면 불러올 수 있습니다.
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
public class DeleteObject {
public static void deleteObject(String projectId, String bucketName, String objectName) {
String projectId = "프로젝트_ID";
String bucketName = "Bucket_이름";
String objectName = "삭제할 파일 이름";
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
Blob blob = storage.get(bucketName, objectName);
if (blob == null) {
System.out.println("The object " + objectName + " wasn't found in " + bucketName);
return;
}
Storage.BlobSourceOption precondition =
Storage.BlobSourceOption.generationMatch(blob.getGeneration());
storage.delete(bucketName, objectName, precondition);
System.out.println("Object " + objectName + " was deleted from " + bucketName);
}
}
Java에서 GCS에 등록되어 있는 이미지 파일을 삭제하기 위한 코드입니다.
https://choo.oopy.io/35bffd94-7a41-4cfa-812c-b8aaf148604a#8a30227b-da39-4889-a2f4-236b236f7705
https://cloud.google.com/storage/docs/samples/storage-delete-file?hl=ko#storage_delete_file-java