Jay's Developer Note

[Android] AWS S3 Pre-Signed URL 로 Streaming 하기(Util 소스 코드 有) 본문

Android

[Android] AWS S3 Pre-Signed URL 로 Streaming 하기(Util 소스 코드 有)

Jay(J) 2022. 10. 31. 01:39
728x90

AWS S3 Pre-Signed URL 로 Streaming 하기

프로젝트 중 난관에 봉착한 사건이 있었다.

S3 에 있는 영상을 스트리밍 해야 하는데 그 Bucket 이 private 으로 설정되어 있어서 public 한 URL 접근이 힘들다는 것이었다.

기존 Util 을 사용한다면 무조건 다운로드를 한 후 재생을 해줘야 하는,, 그래서 스트리밍이 불가능한 사건이었다.

구글링으로 주섬주섬 모아서 private Bucket 에도 유효기간이 있는 public URL 을 생성할 수 있는 코드를 완성시켰다.

가져들 가서 유용하게 쓰이길 바란다..

기타 S3 설정은 이전 글을 참고하면 된다.

https://fall-in-it.tistory.com/46

 

[Android] AWS S3 Upload 하기(Util 소스 코드 有)

프로젝트 진행 중에 클라이언트에서 주기적으로 AWS S3 에 파일을 올려야 하는 상황이 생겼다. 그래서 Util 을 만들었고 기록용으로 글을 작성하려 한다. 나중에 git 화 해야겠다. 소스코드는 공개

fall-in-it.tistory.com


Android 설정

Dependency 추가(app 단의 build.gradle)

implementation 'com.amazonaws:aws-android-sdk-s3:2.13.5'

동일하게 추가해준다.

 

소스코드(그 외는 이전 게시글 참조)

/**
 * S3 Public URL Generator about Private Bucket
 * 
 * @param bucketName	S3 버킷 이름
 * @param key		S3 저장된 key 값
 */
public URL getPublicUrl(String bucketName, String key) {
    // Expire time setting(ms)
    Date expr = new Date();
    // 1 hour
    expr.setTime(expr.getTime() + (1000 * 60 * 60));

	// URL 생성 요청자
    GeneratePresignedUrlRequest gpur = new GeneratePresignedUrlRequest(
            bucketName,
            key
    ).withMethod(HttpMethod.GET)
     .withExpiration(expr);

    AWSCredentials awsCredentials = new BasicAWSCredentials(
            accessKey, secretKey
    );

    AmazonS3Client s3Client = new AmazonS3Client(
            awsCredentials, region
    );
	
    // Public URL Return
    return s3Client.generatePresignedUrl(gpur);
}

 

사용법

vvMain.setVideoURI(Uri.parse(
    S3Util.getInstance()
          .setKeys(accessKey, secretKey)
          .setRegion(Regions.AP_NORTHEAST_2)
          .getPublicUrl(bucketName, key).toString()
));

 

이 코드는 비단 스트리밍 뿐만 아니라 다른 곳에서도 유용하게 쓰일 법하다..

728x90