구글 클라우드 플랫폼(GCP) - 10. 구글 클라우드 저장소 이해와 실습
GCP Cloud Storage + Springboot 연동하기
Springboot + GCP Cloud Storage 연동(파일 업로드, 다운로드)
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:speechtotext-314813-50d9e683a16a.json
(spring.cloud.gcp.storage.credentials.location=classpath:서비스계정키파일.json)
package com.octopus.controller;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo;
import com.octopus.domain.dto.DownloadReqDto;
import com.octopus.domain.dto.UploadReqDto;
import com.octopus.service.GCSService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
@RequiredArgsConstructor
public class GCSController {
private final GCSService gcsService;
@PostMapping("gcs/download")
public ResponseEntity localDownloadFromStorage(@RequestBody DownloadReqDto downloadReqDto){
Blob fileFromGCS = gcsService.downloadFileFromGCS(downloadReqDto);
return ResponseEntity.ok(fileFromGCS.toString());
}
@PostMapping("gcs/upload")
public ResponseEntity localUploadToStorage(@RequestBody UploadReqDto uploadReqDto) throws IOException {
BlobInfo fileFromGCS = gcsService.uploadFileToGCS(uploadReqDto);
return ResponseEntity.ok(fileFromGCS.toString());
}
}
package com.octopus.service;
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.octopus.domain.dto.DownloadReqDto;
import com.octopus.domain.dto.UploadReqDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
@Service
@RequiredArgsConstructor
public class GCSService {
private final Storage storage;
public Blob downloadFileFromGCS(DownloadReqDto downloadReqDto) {
Blob blob = storage.get(downloadReqDto.getBucketName(), downloadReqDto.getDownloadFileName());
blob.downloadTo(Paths.get(downloadReqDto.getLocalFileLocation()));
return blob;
}
@SuppressWarnings("deprecation")
public BlobInfo uploadFileToGCS(UploadReqDto uploadReqDto) throws IOException {
BlobInfo blobInfo =storage.create(
BlobInfo.newBuilder(uploadReqDto.getBucketName(), uploadReqDto.getUploadFileName())
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(Acl.User.ofAllAuthenticatedUsers(), Acl.Role.READER))))
.build(),
new FileInputStream(uploadReqDto.getLocalFileLocation()));
return blobInfo;
}
}
package com.octopus.domain.dto;
import lombok.Getter;
@Getter
public class DownloadReqDto {
private String bucketName;
private String downloadFileName;
private String localFileLocation;
}
package com.octopus.domain.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public class UploadReqDto {
private String bucketName;
private String uploadFileName;
private String localFileLocation;
}