일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- gradle
- commit
- 캡슐화
- IntelliJ
- terms
- Subversion
- 문법
- 특징
- install
- Checkout
- constructor
- java
- cherrypick
- 생성자
- Branch
- git
- Class
- VCS
- Android Studio
- 상속
- SSL
- Android
- error
- TortoiseSVN
- sourcetree
- svn
- intellij 연동
- syntax
- IntelliJ IDEA Community
- 자바
Archives
- Today
- Total
Jay's Developer Note
[Android] AWS S3 Upload 하기(Util 소스 코드 有) 본문
728x90
AWS S3 Upload 하기
프로젝트 진행 중에 클라이언트에서 주기적으로 AWS S3 에 파일을 올려야 하는 상황이 생겼다.
그래서 Util 을 만들었고 기록용으로 글을 작성하려 한다. 나중에 git 화 해야겠다.
소스코드는 공개해놨으니 가져가서 입맛대로 사용하시길 바란다.
AWS S3 를 사용하려면 2개의 선행 작업이 필요하다.
1. IAM 생성
2. S3 Bucket 생성
S3 Bucket 은 프로그래밍으로 동적 생성할 수도 있지만, 클라이언트에서 생성하고 관리하는 컨셉이 아니기 때문에 생성된 버켓에 올리는 프로세스로 진행했다.
AWS 설정
IAM 생성
AWS Console 에서 IAM 으로 들어가서 Add User 를 진행한다.
Type 을 Access key Type 으로 선택해야 한다.
권한은 S3 를 검색하고 FullAccess 권한을 부여한다.
3, 4 스텝은 Optional 이라 설정해도 되고 안 해도 무방하다.
완료가 되면 Key 가 발급되는데 꼭 csv 를 다운로드해서 보관해야 한다. Secret Key 는 다시 안 알려준다..
S3 Bucket 생성
원하는 이름과 원하는 지역을 선택하고 생성한다.
별다른 설정은 필요 없다.
Android 설정
Dependency 추가(app 단의 build.gradle)
implementation 'com.amazonaws:aws-android-sdk-s3:2.13.5'
S3Util 소스코드
import android.content.Context;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferNetworkLossHandler;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import java.io.File;
/**
* 2022. 05. 24.
*
* @author jbchoi
*/
public class S3Util {
private String accessKey = ""; // IAM AccessKey
private String secretKey = ""; // IAM SecretKey
private Region region; // S3 Region
/**
* 생성자 생성 시 초기 Region 설정 : AP_NORTHEAST_2
*/
public S3Util() {
region = Region.getRegion(Regions.AP_NORTHEAST_2);
}
/**
* Overloading
*/
public void uploadWithTransferUtility(
Context context,
String bucketName, File file,
TransferListener listener
) {
this.uploadWithTransferUtility(
context,
bucketName, null, file, null,
listener
);
}
/**
* Overloading
*/
public void uploadWithTransferUtility(
Context context,
String bucketName, String folder, File file,
TransferListener listener
) {
this.uploadWithTransferUtility(
context,
bucketName, folder, file, null,
listener
);
}
/**
* S3 파일 업로드
*
* @param context Context
* @param bucketName S3 버킷 이름(/(슬래쉬) 없이)
* @param folder 버킷 내 폴더 경로(/(슬래쉬) 맨 앞, 맨 뒤 없이)
* @param fileName 파일 이름
* @param file Local 파일 경로
* @param listener AWS S3 TransferListener
*/
public void uploadWithTransferUtility(
Context context,
String bucketName, @Nullable String folder,
File file, @Nullable String fileName,
TransferListener listener
) {
if (TextUtils.isEmpty(accessKey) || TextUtils.isEmpty(secretKey)) {
throw new IllegalArgumentException(
"AccessKey & SecretKey must be not null"
);
}
AWSCredentials awsCredentials = new BasicAWSCredentials(
accessKey, secretKey
);
AmazonS3Client s3Client = new AmazonS3Client(
awsCredentials, region
);
TransferUtility transferUtility = TransferUtility.builder()
.s3Client(s3Client)
.context(context)
.build();
TransferNetworkLossHandler.getInstance(context);
TransferObserver uploadObserver = transferUtility.upload(
(TextUtils.isEmpty(folder))
? bucketName
: bucketName + "/" + folder,
(TextUtils.isEmpty(fileName))
? file.getName()
: fileName,
file
);
uploadObserver.setTransferListener(listener);
}
/**
* Access, Secret Key 설정
*/
public S3Util setKeys(String accessKey, String secretKey) {
this.accessKey = accessKey;
this.secretKey = secretKey;
return this;
}
/**
* Access Key 설정
*/
public S3Util setAccessKey(String accessKey) {
this.accessKey = accessKey;
return this;
}
/**
* Secret Key 설정
*/
public S3Util setSecretKey(String secretKey) {
this.secretKey = secretKey;
return this;
}
/**
* Region Enum 으로 Region 설정
*/
public S3Util setRegion(Regions regionName) {
this.region = Region.getRegion(regionName);
return this;
}
/**
* Region Class 로 Region 설정
*/
public S3Util setRegion(Region region) {
this.region = region;
return this;
}
/**
* Singleton Pattern
*/
public static S3Util getInstance() {
return LHolder.instance;
}
private static class LHolder {
private static final S3Util instance = new S3Util();
}
}
사용법
S3Util.getInstance()
.setKeys("accessKey", "secretKey")
.setRegion(Regions.AP_NORTHEAST_2)
.uploadWithTransferUtility(
this,
"bucketName",
"folderName",
file,
new TransferListener() {
...
}
);
728x90
'Android' 카테고리의 다른 글
[Android] Jetpack Compose 장점 (0) | 2023.11.26 |
---|---|
[Android] AWS S3 Pre-Signed URL 로 Streaming 하기(Util 소스 코드 有) (0) | 2022.10.31 |
[Android] AWS S3 Download 하기(Util 소스 코드 有) (2) | 2022.10.27 |
[Android] 다국어 지원 하기(feat. strings.xml) (0) | 2022.05.20 |
[Android] MQTT 통신 시 중요사항 - SSL/TLS(HTTPS) (0) | 2018.03.14 |