릴리스 노트
제품 공지
build.gradle에 다음을 추가합니다.repositories {google()// 다음 행 추가mavenCentral()}
build.gradle에 다음 종속을 추가합니다.dependencies {...// 다음 행 추가implementation 'com.qcloud.cos:cos-android:5.7.+'}
dependencies {...// 다음 행 추가implementation 'com.qcloud.cos:cos-ktx:5.6.+'}
build.gradle에 다음 종속을 추가합니다.dependencies {...// 다음 행 추가implementation 'com.qcloud.cos:cos-android-lite:5.7.+'}
build.gradle에 beacon 삭제 명령어를 추가하십시오.dependencies {...implementation ('com.qcloud.cos:cos-android:x.x.x'){// 다음 행 추가exclude group: 'com.tencent.qcloud', module: 'beacon-android-release'}}
jar 또는 aar 패키지가 여러 개 포함된 것을 볼 수 있습니다. 다음은 이에 대한 간단한 설명으로, 필요에 따라 패키지를 선택 및 통합하시기 바랍니다.libs 폴더에 넣고, 애플리케이션 레벨(일반적으로 app 모듈 하위)의 build.gradle 파일에 다음 종속을 추가합니다.dependencies {...// 다음 행 추가implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])}
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"/>
BasicLifecycleCredentialProvider의 서브 클래스를 실현해 임시 키 요청 및 결과 반환 과정을 구현합니다.public static class MySessionCredentialProviderextends BasicLifecycleCredentialProvider {@Overrideprotected QCloudLifecycleCredentials fetchNewCredentials()throws QCloudClientException {// 먼저 임시 키 서버로부터 키 정보가 포함된 응답 획득// 응답을 분석하여 임시 키 정보 획득String tmpSecretId = "SECRETID"; // 임시 키 SecretIdString tmpSecretKey = "SECRETKEY"; // 임시 키 SecretKeyString sessionToken = "SESSIONTOKEN"; // 임시 키 Tokenlong expiredTime = 1556183496L;//임시 키 유효 기간 타임스탬프. 단위: 초//사용자 휴대폰 로컬 시간과의 편차가 너무 커 요청이 만료되지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다.// 서버 시간을 서명 시작 시간으로 반환long startTime = 1556182000L; //임시 키 유효 시작 시간. 단위: 초// 최종적으로 임시 키 정보 객체 반환return new SessionQCloudCredentials(tmpSecretId, tmpSecretKey,sessionToken, startTime, expiredTime);}}
MySessionCredentialProvider로 가정합니다. 인스턴스를 초기화해 SDK에 키를 제공합니다.QCloudCredentialProvider myCredentialProvider = new MySessionCredentialProvider();
String secretId = "SECRETID"; //영구 키 secretIdString secretKey = "SECRETKEY"; //영구 키 secretKey// keyDuration: 요청의 키 유효 시간, 단위: 초QCloudCredentialProvider myCredentialProvider =new ShortTimeCredentialProvider(secretId, secretKey, 300);
myCredentialProvider를 사용하려면 CosXmlService 인스턴스를 초기화해야 합니다.CosXmlService는 COS에 액세스하는 모든 인터페이스를 제공하며, 프로그램 단일 항목으로 사용하는 것을 권장합니다.// 버킷의 소재 리전 약칭. 예: 광저우 리전 ap-guangzhouString 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);
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)}}}
// TransferConfig 초기화. 본 예시는 기본 설정을 사용합니다. 사용자 정의할 경우에는 SDK 인터페이스 문서를 참고하십시오.TransferConfig transferConfig = new TransferConfig.Builder().build();// TransferManager 초기화TransferManager transferManager = new TransferManager(cosXmlService,transferConfig);String bucket = "examplebucket-1250000000"; //버킷. 형식: BucketName-APPIDString 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() {@Overridepublic void onProgress(long complete, long target) {// todo Do something to update progress...uploadId = cosxmlUploadTask.getUploadId();}});//반환 결과 콜백 설정cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLUploadTask.COSXMLUploadTaskResult cOSXMLUploadTaskResult =(COSXMLUploadTask.COSXMLUploadTaskResult) result;}@Overridepublic void onFail(CosXmlRequest request,CosXmlClientException clientException,CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//작업 상태 콜백 설정. 작업 진행 과정을 확인할 수 있습니다.cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
// 본 예시는 viewModel의 ktx 확장 사용// viewModelScope는 viewmodel의 자체 coroutine scopeviewModelScope.launch {val `object` = cosObject {bucket = cosBucket {service = cosXmlServicename = "examplebucket-1250000000"}key = "exampleObject"}// 로컬 예시 파일val sourceFile = File(appContext.externalCacheDir, "sourceFile")try {// upload 방법: suspend functionval 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()}}
// 고급 다운로드 인터페이스는 중단된 지점부터 이어 올리기를 지원합니다. 따라서 다운로드 전에 HEAD를 요청하여 파일 정보를 획득하시기 바랍니다.// 임시 키 또는 서브 계정을 사용해 액세스하는 경우 권한 리스트에 HeadObject 권한이 포함되어 있는지 확인하십시오.// TransferConfig 초기화. 본 예시는 기본 설정을 사용합니다. 사용자 정의할 경우에는 SDK 인터페이스 문서를 참고하십시오.TransferConfig transferConfig = new TransferConfig.Builder().build();//TransferManager 초기화TransferManager transferManager = new TransferManager(cosXmlService,transferConfig);String bucket = "examplebucket-1250000000"; //버킷. 형식: BucketName-APPIDString cosPath = "exampleobject"; //버킷 내 객체 위치 식별자. 즉, 객체 키//로컬 디렉터리 경로String savePathDir = context.getExternalCacheDir().toString();//로컬에 저장할 파일명. 입력하지 않는 경우(null) COS의 파일명과 동일String savedFileName = "exampleobject";Context applicationContext = context.getApplicationContext(); // application// contextCOSXMLDownloadTask cosxmlDownloadTask =transferManager.download(applicationContext,bucket, cosPath, savePathDir, savedFileName);//다운로드 진행률 콜백 설정cosxmlDownloadTask.setCosXmlProgressListener(new CosXmlProgressListener() {@Overridepublic void onProgress(long complete, long target) {// todo Do something to update progress...}});//반환 결과 콜백 설정cosxmlDownloadTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLDownloadTask.COSXMLDownloadTaskResult cOSXMLDownloadTaskResult =(COSXMLDownloadTask.COSXMLDownloadTaskResult) result;}@Overridepublic void onFail(CosXmlRequest request,CosXmlClientException clientException,CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//작업 상태 콜백 설정. 작업 진행 과정을 확인할 수 있습니다.cosxmlDownloadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
// 본 예시는 viewModel의 ktx 확장 사용// viewModelScope는 viewmodel의 자체 coroutine scopeviewModelScope.launch {val `object` = cosObject {bucket = cosBucket {service = cosname = "examplebucket-1250000000"}key = "exampleObject"}try {// download 방법: suspend functionval 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()}}
피드백