PengTory

GCP storgae 이미지 url 다운로드, 그냥 열기 본문

개발 기록

GCP storgae 이미지 url 다운로드, 그냥 열기

펭토리 2022. 12. 7. 15:59

 SpringBoot를 사용해 이미지를 함께 저장해야하는 POST API를 만들고 있다.

공부용으로 항상 사용하던 AWS s3 말고 GCP storage를 사용해보고 있다.

 

 GCP storage는 s3와 굉장히 비슷하게 이루어져있는 것 같다.

이번 프로젝트에서도 GCPService 클래스를 만들어 GCP storage에 이미지를 올리고 url을 받아 DB에 저장주는 방식을 사용했다.

파일을 업로드하는 코드는 아래와 같다.

@Service
@Slf4j
public class GCPService {
    @Value("${SPRING_GCP_BUCKETNAME}")
    private String bucketName;

    @Autowired
    private Storage storage;

    public List<String> uploadFile(List<MultipartFile> multipartFile) throws IOException {
        log.info("start GCPService.uploadFile method");
        List<String> urlList = new ArrayList<>();

        for(MultipartFile file: multipartFile) {
            String fileName = file.getOriginalFilename()+ UUID.randomUUID();
            BlobId blobId = BlobId.of(bucketName,fileName);
            BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
            storage.create(blobInfo, file.getBytes());
            urlList.add("https://storage.googleapis.com/" + bucketName + "/" + fileName);
        }
        return urlList;
    }

}

 다음 코드를 실행시키면 지정한 버킷에 아래처럼 객체가 들어가게 되고 공개 URL 혹은 인증된 URL을 누르면 이미지가 열리는게 아니라 다운이 되는 것을 확인할 수 있다.



아래와 같이 로컬 환경에 다운로드 된다.

 

 하지만 나는 사진이 다운되는 것이 아니라 열리길 원했다.

 위 사진의 메타 데이터를 image/jpeg로 수정하자 원하는대로 사진이 열렸다. 수정한 코드는 아래와 같다.

ContentType을 set으로 지정해주었다.

 BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("image/jpeg").build();

수정 후 업로드한 객체는 다음과 같다.

그럼 아래에 있는 URL을 다시 눌러보자.

짜잔 귀여운 오목눈이가 나타났다. 성공!

'개발 기록' 카테고리의 다른 글

Slow Letter 개발 기록 (2) _ Backend  (1) 2023.01.17
Slow Letter 개발기록 (1) _ 준비과정  (0) 2023.01.17
채팅 서비스 프로젝트 시작  (0) 2023.01.02