build.gradle
中添加:repositories {google()// 增加这行mavenCentral()}
build.gradle
中添加依赖:dependencies {...// 增加这行implementation 'com.qcloud.cos:cos-android:5.9.+'}
build.gradle
中添加依赖:dependencies {...// 增加这行implementation 'com.qcloud.cos:cos-android-lite:5.9.+'}
build.gradle
中进行如下操作:dependencies {...// 修改为implementation 'com.qcloud.cos:cos-android-nobeacon:x.x.x'//lite 版本修改为implementation 'com.qcloud.cos:cos-android-lite-nobeacon:x.x.x'}
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);
QCloudSelfSigner
的子类,实现获取服务端签名并加入请求授权。QCloudSelfSigner myQCloudSelfSigner = new QCloudSelfSigner() {/*** 对请求进行签名** @param request 需要签名的请求* @throws QCloudClientException 客户端异常*/@Overridepublic void sign(QCloudHttpRequest request) throws QCloudClientException {// 1. 把 request 的请求参数传给服务端计算签名String auth = "get auth from server";// 2. 给请求添加签名request.addHeader(HttpConstants.Header.AUTHORIZATION, auth);}});
myCredentialProvider
或 服务端签名授权实例 myQCloudSelfSigner
,初始化一个 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);// 通过服务端签名授权初始化 COS Service,获取实例CosXmlService cosXmlService = new CosXmlService(context,serviceConfig, myQCloudSelfSigner);
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder().build();// 初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService,transferConfig);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键String srcPath = new File(context.getCacheDir(), "exampleobject").toString(); //本地文件的绝对路径//若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 nullString uploadId = null;// 上传文件COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,srcPath, uploadId);//设置初始化分块上传回调(5.9.7版本以及后续版本支持)cosxmlUploadTask.setInitMultipleUploadListener(new InitMultipleUploadListener() {@Overridepublic void onSuccess(InitiateMultipartUpload initiateMultipartUpload) {//用于下次续传上传的 uploadIdString uploadId = initiateMultipartUpload.uploadId;}});//设置上传进度回调cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {@Overridepublic void onProgress(long complete, long target) {// todo Do something to update progress...}});//设置返回结果回调cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLUploadTask.COSXMLUploadTaskResult uploadResult =(COSXMLUploadTask.COSXMLUploadTaskResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest request,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//设置任务状态回调, 可以查看任务过程cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
// 高级下载接口支持断点续传,所以会在下载前先发起 HEAD 请求获取文件信息。// 如果您使用的是临时密钥或者使用子账号访问,请确保权限列表中包含 HeadObject 的权限。// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder().build();//初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService,transferConfig);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String 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 downloadTaskResult =(COSXMLDownloadTask.COSXMLDownloadTaskResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest request,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//设置任务状态回调,可以查看任务过程cosxmlDownloadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
本页内容是否解决了您的问题?