tencent cloud

Cloud Object Storage

동향 및 공지
릴리스 노트
제품 공지
제품 소개
제품 개요
기능 개요
적용 시나리오
제품 장점
기본 개념
리전 및 액세스 도메인
규격 및 제한
제품 요금
과금 개요
과금 방식
과금 항목
프리 티어
과금 예시
청구서 보기 및 다운로드
연체 안내
FAQ
빠른 시작
콘솔 시작하기
COSBrowser 시작하기
사용자 가이드
요청 생성
버킷
객체
데이터 관리
일괄 프로세스
글로벌 가속
모니터링 및 알람
운영 센터
데이터 처리
스마트 툴 박스 사용 가이드
데이터 워크플로
애플리케이션 통합
툴 가이드
툴 개요
환경 설치 및 설정
COSBrowser 툴
COSCLI 툴
COSCMD 툴
COS Migration 툴
FTP Server 툴
Hadoop 툴
COSDistCp 툴
HDFS TO COS 툴
온라인 도구 (Onrain Dogu)
자가 진단 도구
실습 튜토리얼
개요
액세스 제어 및 권한 관리
성능 최적화
AWS S3 SDK를 사용하여 COS에 액세스하기
데이터 재해 복구 백업
도메인 관리 사례
이미지 처리 사례
COS 오디오/비디오 플레이어 사례
데이터 다이렉트 업로드
데이터 보안
데이터 검증
빅 데이터 사례
COS 비용 최적화 솔루션
3rd party 애플리케이션에서 COS 사용
마이그레이션 가이드
로컬 데이터 COS로 마이그레이션
타사 클라우드 스토리지 데이터를 COS로 마이그레이션
URL이 소스 주소인 데이터를 COS로 마이그레이션
COS 간 데이터 마이그레이션
Hadoop 파일 시스템과 COS 간 데이터 마이그레이션
데이터 레이크 스토리지
클라우드 네이티브 데이터 레이크
메타데이터 가속
데이터 레이크 가속기 GooseFS
데이터 처리
데이터 처리 개요
이미지 처리
미디어 처리
콘텐츠 조정
파일 처리
문서 미리보기
장애 처리
RequestId 가져오기
공용 네트워크로 COS에 파일 업로드 시 속도가 느린 문제
COS 액세스 시 403 에러 코드 반환
리소스 액세스 오류
POST Object 자주 발생하는 오류
보안 및 컴플라이언스
데이터 재해 복구
데이터 보안
액세스 관리
자주 묻는 질문
인기 질문
일반 문제
과금
도메인 규정 준수 문제
버킷 설정 문제
도메인 및 CDN 문제
파일 작업 문제
로그 모니터링 문제
권한 관리
데이터 처리 문제
데이터 보안 문제
사전 서명 URL 관련 문제
SDK FAQ
툴 관련 문제
API 관련 문제
Agreements
Service Level Agreement
개인 정보 보호 정책
데이터 처리 및 보안 계약
연락처
용어집
문서Cloud Object Storage

시작하기

포커스 모드
폰트 크기
마지막 업데이트 시간: 2024-06-25 11:03:14

관련 리소스

SDK 소스 코드는 XML Android SDK를 참고하십시오.
예시 Demo는 XML Android SDK Demo를 참고하십시오.
SDK 인터페이스 및 매개변수 문서는 SDK API 참고를 참고하십시오.
SDK 문서의 모든 예시 코드는 SDK 코드 예시를 참고하십시오.
SDK 로그 업데이트는 ChangeLog를 참고하십시오.
SDK FAQ는 Android SDK FAQ를 참고하십시오.
설명:
XML 버전의 SDK를 사용할 때 함수나 메소드가 존재하지 않는 등의 오류가 발생하는 경우, SDK의 XML 버전을 최신 버전으로 업그레이드한 후 다시 시도하십시오.

준비 작업

1. Android 애플리케이션이 필요합니다. 기존의 프로젝트 또는 새로 생성한 프로젝트 모두 가능합니다.
2. Android 애플리케이션의 타깃은 API 레벨 15(Ice Cream Sandwich) 버전 이상이어야 합니다.
3. Tencent Cloud 임시 키를 받을 수 있는 원격 주소가 필요합니다. 임시 키에 관한 설명은 모바일 애플리케이션 다이렉트 업로드 사례를 참고하십시오.

1단계: SDK 설치

방법1: 자동 통합(권장)

설명:
bintray 리포지토리는 이미 삭제되었으며, COS SDK는 mavenCentral에 마이그레이션되어 있습니다. 참고 경로가 변경되었으니 업데이트 시 새 참고 경로를 사용하십시오.

mavenCentral 라이브러리 사용

프로젝트 레벨(일반적으로 루트 디렉터리 하위)의 build.gradle에 다음을 추가합니다.
repositories {
google()
// 다음 행 추가
mavenCentral()
}

표준 버전 SDK

애플리케이션 레벨(일반적으로 app 모듈 하위)의 build.gradle에 다음 종속을 추가합니다.
dependencies {
...
// 다음 행 추가
implementation 'com.qcloud.cos:cos-android:5.7.+'
}
프로젝트에 kotlin 개발을 사용한 경우 Tencent Cloud의 ktx 확장 패키지를 추가할 수 있으며 호환성이 더 높은 API를 제공합니다.
dependencies {
...
// 다음 행 추가
implementation 'com.qcloud.cos:cos-ktx:5.6.+'
}

라이트 버전 SDK

애플리케이션 레벨(일반적으로 app 모듈 하위)의 build.gradle에 다음 종속을 추가합니다.
dependencies {
...
// 다음 행 추가
implementation 'com.qcloud.cos:cos-android-lite:5.7.+'
}

beacon 리포트 기능 비활성화(5.5.8 이상 버전에 적용)

SDK의 품질을 지속적으로 추적 및 최적화하여 사용자에게 더 나은 경험을 제공하기 위해 SDK에 beacon 분석 기능을 도입했습니다.
해당 기능을 비활성화하려면 애플리케이션 레벨(일반적으로 app 모듈 하위)의 build.gradle에 beacon 삭제 명령어를 추가하십시오.
dependencies {
...
implementation ('com.qcloud.cos:cos-android:x.x.x'){
// 다음 행 추가
exclude group: 'com.tencent.qcloud', module: 'beacon-android-release'
}
}

방법2: 수동 통합

1. 보관된 파일 다운로드

정식 패키지의 최신 버전은 고속 다운로드 주소에서 다운로드할 수 있으며, 이전 버전은 SDK Releases에서 찾을 수 있습니다.
다운로드 후 압축을 해제하면 jar 또는 aar 패키지가 여러 개 포함된 것을 볼 수 있습니다. 다음은 이에 대한 간단한 설명으로, 필요에 따라 패키지를 선택 및 통합하시기 바랍니다.
필수 라이브러리:
cosxml: COS 프로토콜 구현
qcloud-foundation: 기본 라이브러리
bolts-tasks: 3rd party Task 라이브러리
okhttp: 3rd party Networking 라이브러리
okio: 3rd party IO 라이브러리
옵션 라이브러리:
beacon: beacon 모바일 분석. SDK 개선에 사용
LogUtils: 로그 모듈. SDK 개선에 사용
quic: QUIC 프로토콜. QUIC 프로토콜로 데이터 전송 시 필요

2. 프로젝트에 통합

필요한 패키지를 애플리케이션 모듈의 libs 폴더에 넣고, 애플리케이션 레벨(일반적으로 app 모듈 하위)의 build.gradle 파일에 다음 종속을 추가합니다.
dependencies {
...
// 다음 행 추가
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}

2단계: 권한 설정

네트워크 권한

SDK는 COS 서버와 통신을 위해 네트워크 권한이 필요합니다. 애플리케이션 모듈의 AndroidManifest.xml에 다음 권한 선언을 추가합니다.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

스토리지 권한

응용 시나리오 중 외부 스토리지에서 파일을 읽고 써야 하는 경우, 애플리케이션 모듈의 AndroidManifest.xml에 다음 권한 선언을 추가합니다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
주의:
Android 6.0(API level 23) 이상에서 실행 시 스토리지 권한 동적 신청이 필요합니다.

3단계: 사용하기

1. 임시 키 획득

BasicLifecycleCredentialProvider의 서브 클래스를 실현해 임시 키 요청 및 결과 반환 과정을 구현합니다.
public static class MySessionCredentialProvider
extends BasicLifecycleCredentialProvider {

@Override
protected QCloudLifecycleCredentials fetchNewCredentials()
throws QCloudClientException {

// 먼저 임시 키 서버로부터 키 정보가 포함된 응답 획득

// 응답을 분석하여 임시 키 정보 획득
String tmpSecretId = "SECRETID"; // 임시 키 SecretId
String tmpSecretKey = "SECRETKEY"; // 임시 키 SecretKey
String sessionToken = "SESSIONTOKEN"; // 임시 키 Token
long expiredTime = 1556183496L;//임시 키 유효 기간 타임스탬프. 단위: 초

//사용자 휴대폰 로컬 시간과의 편차가 너무 커 요청이 만료되지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다.
// 서버 시간을 서명 시작 시간으로 반환
long startTime = 1556182000L; //임시 키 유효 시작 시간. 단위: 초

// 최종적으로 임시 키 정보 객체 반환
return new SessionQCloudCredentials(tmpSecretId, tmpSecretKey,
sessionToken, startTime, expiredTime);
}
}
여기서는 클래스 이름을 MySessionCredentialProvider로 가정합니다. 인스턴스를 초기화해 SDK에 키를 제공합니다.
QCloudCredentialProvider myCredentialProvider = new MySessionCredentialProvider();

영구 키로 로컬 디버깅 진행

Tencent Cloud의 영구 키로 개발 단계에 있는 로컬 디버깅을 진행할 수 있습니다. 해당 방법은 키가 유출될 리스크가 있으니 런칭 전 반드시 임시 키로 대체하십시오.
String secretId = "SECRETID"; //영구 키 secretId
String secretKey = "SECRETKEY"; //영구 키 secretKey

// keyDuration: 요청의 키 유효 시간, 단위: 초
QCloudCredentialProvider myCredentialProvider =
new ShortTimeCredentialProvider(secretId, secretKey, 300);

2. COS Service 초기화

사용자가 키를 제공하는 인스턴스 myCredentialProvider를 사용하려면 CosXmlService 인스턴스를 초기화해야 합니다.
CosXmlService는 COS에 액세스하는 모든 인터페이스를 제공하며, 프로그램 단일 항목으로 사용하는 것을 권장합니다.
// 버킷의 소재 리전 약칭. 예: 광저우 리전 ap-guangzhou
String region = "COS_REGION";

// CosXmlServiceConfig 객체 생성. 필요에 따라 기본 매개변수 설정 수정
CosXmlServiceConfig serviceConfig = new CosXmlServiceConfig.Builder()
.setRegion(region)
.isHttps(true) // HTTPS 요청 사용. 기본값: HTTP 요청
.builder();

// COS Service를 초기화해 인스턴스 획득
CosXmlService cosXmlService = new CosXmlService(context,
serviceConfig, myCredentialProvider);
설명:
버킷의 각 리전에 대한 약칭은 리전 및 액세스 도메인을 참고하십시오.

ktx 패키지로 COS Service 초기화

ktx를 사용하면 초기화 코드가 다음과 같이 간략합니다.
val cos = cosService(context = application.applicationContext) {

configuration {
setRegion("ap-guangzhou")
isHttps(true)
}

credentialProvider {
lifecycleCredentialProvider {
// fetch credential from backend
// ...
return@lifecycleCredentialProvider SessionQCloudCredentials(
"temp_secret_id",
"temp_secret_key",
"session_token",
1556183496
)
}
}
}

4단계: COS 서비스 액세스

객체 업로드

SDK는 로컬 파일, 바이너리 데이터, Uri, 입력 스트림을 지원합니다. 아래는 로컬 파일 업로드 예시입니다.
// TransferConfig 초기화. 본 예시는 기본 설정을 사용합니다. 사용자 정의할 경우에는 SDK 인터페이스 문서를 참고하십시오.
TransferConfig transferConfig = new TransferConfig.Builder().build();
// TransferManager 초기화
TransferManager transferManager = new TransferManager(cosXmlService,
transferConfig);

String bucket = "examplebucket-1250000000"; //버킷. 형식: BucketName-APPID
String cosPath = "exampleobject"; //버킷 내 객체 위치 식별자. 즉, 객체 키
String srcPath = new File(context.getCacheDir(), "exampleobject")
.toString(); //로컬 파일의 절대 경로
// 멀티파트 업로드를 초기화한 UploadId가 존재하는 경우 해당하는 uploadId 값을 대입하여 계속 전달합니다. 존재하지 않는 경우 null을 대입합니다.
// 이번 업로드 작업의 uploadid는 TransferStateListener 콜백에서 가져올 수 있습니다.
String uploadId = null;

// 파일 업로드
COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,
srcPath, uploadId);

//업로드 진행률 콜백 설정. 업로드 재개에 사용되는 uploadId를 획득할 수 있습니다.
cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
@Override
public void onProgress(long complete, long target) {
// todo Do something to update progress...
uploadId = cosxmlUploadTask.getUploadId();
}
});
//반환 결과 콜백 설정
cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {
@Override
public void onSuccess(CosXmlRequest request, CosXmlResult result) {
COSXMLUploadTask.COSXMLUploadTaskResult cOSXMLUploadTaskResult =
(COSXMLUploadTask.COSXMLUploadTaskResult) result;
}

@Override
public void onFail(CosXmlRequest request,
CosXmlClientException clientException,
CosXmlServiceException serviceException) {
if (clientException != null) {
clientException.printStackTrace();
} else {
serviceException.printStackTrace();
}
}
});
//작업 상태 콜백 설정. 작업 진행 과정을 확인할 수 있습니다.
cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {
@Override
public void onStateChanged(TransferState state) {
// todo notify transfer state
}
});

ktx 패키지로 객체 업로드

ktx를 사용하는 경우 아래 업로드 예시 코드를 참고하십시오.
// 본 예시는 viewModel의 ktx 확장 사용
// viewModelScope는 viewmodel의 자체 coroutine scope
viewModelScope.launch {
val `object` = cosObject {
bucket = cosBucket {
service = cosXmlService
name = "examplebucket-1250000000"
}
key = "exampleObject"
}
// 로컬 예시 파일
val sourceFile = File(appContext.externalCacheDir, "sourceFile")

try {
// upload 방법: suspend function
val result = `object`.upload(
localFile = sourceFile,
progressListener = { complete, target ->
Log.d("cosxmlktx", "upload onProgress:" +
" $complete / $target")
},
transferStateListener = { state ->
Log.d("cosxmlktx", "upload state is : $state")
}
)

} catch (e : Exception ) {
e.printStackTrace()
}

}
설명:
전체 예시는 GitHub를 참고하십시오.
업로드 후 같은 Key를 사용해 파일 다운로드 링크를 생성할 수 있습니다. 자세한 사용 방법은 사전 서명된 링크 생성 문서를 참고하십시오. 파일의 권한이 개인 읽기일 경우, 다운로드 링크에 유효 시간이 있습니다.

객체 다운로드

// 고급 다운로드 인터페이스는 중단된 지점부터 이어 올리기를 지원합니다. 따라서 다운로드 전에 HEAD를 요청하여 파일 정보를 획득하시기 바랍니다.
// 임시 키 또는 서브 계정을 사용해 액세스하는 경우 권한 리스트에 HeadObject 권한이 포함되어 있는지 확인하십시오.

// TransferConfig 초기화. 본 예시는 기본 설정을 사용합니다. 사용자 정의할 경우에는 SDK 인터페이스 문서를 참고하십시오.
TransferConfig transferConfig = new TransferConfig.Builder().build();
//TransferManager 초기화
TransferManager transferManager = new TransferManager(cosXmlService,
transferConfig);

String bucket = "examplebucket-1250000000"; //버킷. 형식: BucketName-APPID
String cosPath = "exampleobject"; //버킷 내 객체 위치 식별자. 즉, 객체 키
//로컬 디렉터리 경로
String savePathDir = context.getExternalCacheDir().toString();
//로컬에 저장할 파일명. 입력하지 않는 경우(null) COS의 파일명과 동일
String savedFileName = "exampleobject";

Context applicationContext = context.getApplicationContext(); // application
// context
COSXMLDownloadTask cosxmlDownloadTask =
transferManager.download(applicationContext,
bucket, cosPath, savePathDir, savedFileName);

//다운로드 진행률 콜백 설정
cosxmlDownloadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
@Override
public void onProgress(long complete, long target) {
// todo Do something to update progress...
}
});
//반환 결과 콜백 설정
cosxmlDownloadTask.setCosXmlResultListener(new CosXmlResultListener() {
@Override
public void onSuccess(CosXmlRequest request, CosXmlResult result) {
COSXMLDownloadTask.COSXMLDownloadTaskResult cOSXMLDownloadTaskResult =
(COSXMLDownloadTask.COSXMLDownloadTaskResult) result;
}

@Override
public void onFail(CosXmlRequest request,
CosXmlClientException clientException,
CosXmlServiceException serviceException) {
if (clientException != null) {
clientException.printStackTrace();
} else {
serviceException.printStackTrace();
}
}
});
//작업 상태 콜백 설정. 작업 진행 과정을 확인할 수 있습니다.
cosxmlDownloadTask.setTransferStateListener(new TransferStateListener() {
@Override
public void onStateChanged(TransferState state) {
// todo notify transfer state
}
});

ktx 패키지로 객체 다운로드

ktx를 사용하는 경우 아래 다운로드 예시 코드를 참고하십시오.
// 본 예시는 viewModel의 ktx 확장 사용
// viewModelScope는 viewmodel의 자체 coroutine scope
viewModelScope.launch {
val `object` = cosObject {
bucket = cosBucket {
service = cos
name = "examplebucket-1250000000"
}
key = "exampleObject"
}

try {
// download 방법: suspend function
val result = `object`.download(
context = appContext,
destDirectory = appContext.externalCacheDir!!,
progressListener = { complete, target ->
Log.d("cosxmlktx", "download onProgress: " +
"$complete / $target")
},
transferStateListener = { state ->
Log.d("cosxmlktx", "download state is : $state")
}
)

} catch (e : Exception ) {
e.printStackTrace()
}

}
설명:
전체 예시는 GitHub를 참고하십시오. -고급 다운로드 인터페이스는 중단된 지점부터 이어 올리기를 지원합니다. 따라서 다운로드 전에 HEAD를 요청하여 파일 정보를 획득하시기 바랍니다. 임시 키 또는 서브 계정을 사용해 액세스하는 경우 권한 리스트에 HeadObject 권한이 포함되어 있는지 확인하십시오.

도움말 및 지원

문제 해결에 도움이 되었나요?

피드백